Ejemplo n.º 1
0
List<Triangle> Mesh::GetTris(){
	List<Triangle> triangles;
	for (int i = 0; i < numFaces; ++i){
		// Just copy shit from it
		MeshFace * f = &faces[i];
		assert((f->numVertices <= 4 || f->numVertices >= 3) && "Bad vertices count in faces");

		Vector3f p1 = vertices[f->vertices[0]],
			p2 = vertices[f->vertices[1]],
			p3 = vertices[f->vertices[2]];

		if (f->numVertices == 4){
			assert(false && "faces has quads!");
// 			Vector3f p4 = vertices[faces->vertices[3]];
// 			Quad * quad = new Quad();
// 			quad->Set4Points(p1, p2, p3, p4);
// 			quads.Add(quad);
		}
		else if (f->numVertices == 3){
			Triangle tri;
			tri.Set3Points(p1, p2, p3);
			triangles.Add(tri);
		}
	}
	assert(triangles.Size() > 0);
	return triangles;
}
Ejemplo n.º 2
0
bool PhysicsMesh::LoadFrom(Mesh * mesh)
{
	// Clear old
	triangles.ClearAndDelete();
	quads.ClearAndDelete();

	name = mesh->name;
	source = mesh->source; 
	aabb = *mesh->aabb;

	for (int i = 0; i < mesh->numFaces; ++i)
	{
		// Just copy shit from it
		MeshFace * faces = &mesh->faces[i];
		assert((faces->numVertices <= 4 || faces->numVertices >= 3) && "Bad vertices count in faces");

		int vi0 = faces->vertices[0],
			vi1 = faces->vertices[1],
			vi2 = faces->vertices[2];

		assert(vi0 < mesh->vertices.Size() && 
			vi0 >= 0);

		Vector3f p1 = mesh->vertices[vi0],
			p2 = mesh->vertices[vi1],
			p3 = mesh->vertices[vi2];

		if (faces->numVertices == 4){
			Vector3f p4 = mesh->vertices[faces->vertices[3]];
			Quad * quad = new Quad();
			quad->Set4Points(p1, p2, p3, p4);
			quads.Add(quad);
		}
		else if (faces->numVertices == 3){
			Triangle * tri = new Triangle();
			tri->Set3Points(p1, p2, p3);
			triangles.Add(tri);
		}
	}
	if (quads.Size() == 0 && triangles.Size() == 0)
		assert(false && "Unable to load physicsmesh from mesh source!");
	else
		std::cout<<"\nCreated physics mesh for \""<<source<<"\": ";
	if (triangles.Size())
		std::cout<<"\n- "<<triangles.Size()<<" triangles";
	if (quads.Size())
		std::cout<<"\n- "<<quads.Size()<<" quads";

	// Re-generate it.
	if (useCollisionShapeOctrees)
		GenerateCollisionShapeOctree();
	return true;
}