Exemple #1
0
BoxCollider BoxCollider::generateCage(const Entity &entity) {
  const Transform &t = entity.getComponent<Transform>();
  const Vector3f &rotation = t.rotation;
  const Vector3f &position = t.position;
  const Vector3f &scale = t.scale;

  if (entity.hasComponent<MeshDrawable>()) {
    Mesh &mesh = entity.getComponent<MeshDrawable>().mesh;
    Matrix4f modelMatrix;
    modelMatrix.rotate(rotation);
    modelMatrix.scale(scale);

    Vector3f size;
    for (unsigned int i = 0; i < mesh.vertices.size(); i++) {
      Vector3f v = modelMatrix.transform(mesh.vertices[i]);

      size.x = (fabs(v.x) > size.x) ? fabs(v.x) : size.x;
      size.y = (fabs(v.y) > size.y) ? fabs(v.y) : size.y;
      size.z = (fabs(v.z) > size.z) ? fabs(v.z) : size.z;
    }
    return BoxCollider(position, size * 2);
  }
  return BoxCollider(position, scale * 2);
}
void Level00::LoadStaticSceneObjects(LegacySceneObject** sceneObjects, mat4f** transforms, BoxColliderComponent** colliders, vec3f* positions, vec3f* rotations, vec3f* scales, int size)
{
	// Allocate size SceneObjects
	*sceneObjects = reinterpret_cast<LegacySceneObject*>(mSceneAllocator.Allocate(sizeof(LegacySceneObject) * size, alignof(BaseSceneObject), 0));
	*transforms = reinterpret_cast<mat4f*>(mSceneAllocator.Allocate(sizeof(mat4f) * size, alignof(mat4f), 0));
	*colliders = reinterpret_cast<BoxColliderComponent*>(mSceneAllocator.Allocate(sizeof(BoxColliderComponent) * size, alignof(BoxColliderComponent), 0));

	for (int i = 0; i < size; i++)
	{
		(*transforms)[i] = (mat4f::scale(scales[i]) * mat4f::translate(positions[i])).transpose();
		(*colliders)[i].mCollider = BoxCollider({ positions[i], vec3f(0.85f) * scales[i] });

		(*sceneObjects)[i].mWorldMatrix = transforms[i];
		(*sceneObjects)[i].mBoxCollider = colliders[i];
	}
}
BoxCollider BoxCollider::generateCage(const VisualEntity &entity) {
  Matrix4f modelMatrix;
  //modelMatrix.translate(entity.position);
  modelMatrix.rotate(entity.rotation);
  modelMatrix.scale(entity.scale);

  Vector3f position;
  position.set(entity.position);
  Vector3f size;
  for (unsigned int i = 0; i < entity.mesh.vertices.size(); i++) {
    Vector3f v = modelMatrix.transform(entity.mesh.vertices[i]);

    size.x = (fabs(v.x) > size.x) ? fabs(v.x) : size.x;
    size.y = (fabs(v.y) > size.y) ? fabs(v.y) : size.y;
    size.z = (fabs(v.z) > size.z) ? fabs(v.z) : size.z;
  }

  return BoxCollider(position, size * 2);
}