Browse Source

fix that was preventing full floor meshes being created

Zachary Pavlov 18 years ago
parent
commit
d64c2e36c0
1 changed files with 21 additions and 6 deletions
  1. 21 6
      panda/src/egg2pg/eggLoader.cxx

+ 21 - 6
panda/src/egg2pg/eggLoader.cxx

@@ -3180,20 +3180,35 @@ create_collision_floor_mesh(CollisionNode *cnode,
   for (ci = group->begin(); ci != group->end(); ++ci) {
   for (ci = group->begin(); ci != group->end(); ++ci) {
     EggPolygon *poly = DCAST(EggPolygon, *ci);
     EggPolygon *poly = DCAST(EggPolygon, *ci);
     if (poly->get_num_vertices() == 3) {
     if (poly->get_num_vertices() == 3) {
-      EggPolygon::const_iterator vi;
-      EggVertex p1,p2,p3;
-      vi = poly->begin();
       CollisionFloorMesh::TriangleIndices tri;
       CollisionFloorMesh::TriangleIndices tri;
       
       
       //generate a shared vertex triangle from the vertex pool
       //generate a shared vertex triangle from the vertex pool
       tri.p1=pool.create_unique_vertex(*poly->get_vertex(0))->get_index();
       tri.p1=pool.create_unique_vertex(*poly->get_vertex(0))->get_index();
-      ++vi;
       tri.p2=pool.create_unique_vertex(*poly->get_vertex(1))->get_index();
       tri.p2=pool.create_unique_vertex(*poly->get_vertex(1))->get_index();
-      ++vi;
       tri.p3=pool.create_unique_vertex(*poly->get_vertex(2))->get_index();
       tri.p3=pool.create_unique_vertex(*poly->get_vertex(2))->get_index();
       
       
       triangles.push_back(tri);
       triangles.push_back(tri);
-    }
+    } else if (poly->get_num_vertices() == 4) {
+      //this is a case that really shouldn't happen, but appears to be required
+      //-split up the quad int 2 tris. 
+      CollisionFloorMesh::TriangleIndices tri;
+      CollisionFloorMesh::TriangleIndices tri2;
+      
+      //generate a shared vertex triangle from the vertex pool
+      tri.p1=pool.create_unique_vertex(*poly->get_vertex(0))->get_index();
+      tri.p2=pool.create_unique_vertex(*poly->get_vertex(1))->get_index();
+      tri.p3=pool.create_unique_vertex(*poly->get_vertex(2))->get_index();
+      
+      triangles.push_back(tri);
+
+      //generate a shared vertex triangle from the vertex pool
+      tri2.p1=tri.p1;
+      tri2.p2=tri.p3;      
+      tri2.p3=pool.create_unique_vertex(*poly->get_vertex(3))->get_index();
+
+      
+      triangles.push_back(tri2);
+    }  
   }
   }
   
   
   //Now we have a set of triangles, and a pool
   //Now we have a set of triangles, and a pool