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; }
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; }