@ -211,6 +211,9 @@ int process_faces(const world_t* world)
{
face_t * face = & world - > faces [ faceIdx ] ;
ps1bsp_face_t outFace = { 0 } ;
outFace . firstVertexIndex = faceVertIndices . size ( ) ;
// Traverse the list of face edges to collect all of the face's vertices
for ( int edgeListIdx = 0 ; edgeListIdx < face - > ledge_num ; + + edgeListIdx )
{
@ -223,9 +226,6 @@ int process_faces(const world_t* world)
faceVertIndices . push_back ( vertIndex ) ;
}
ps1bsp_face_t outFace = { 0 } ;
outFace . firstTriangleId = outTriangles . size ( ) ;
//printf("Face %d: %d vertices\n", faceIdx, faceVerts.size());
// Triangulate face into polygons (triangle fan, the naive method)
@ -240,19 +240,17 @@ int process_faces(const world_t* world)
outTriangles . push_back ( outTriangle ) ;
}
outFace . numTriangles = outTriangl es . size ( ) - outFace . firstTriangleId ;
outFace . numVertices = faceVertIndic es . size ( ) - outFace . firstVertexIndex ;
outFaces . push_back ( outFace ) ;
faceVertIndices . clear ( ) ;
}
// Write triangle and face data to file
fwrite ( outTriangl es. data ( ) , sizeof ( ps1bsp_triangle_t ) , outTriangl es. size ( ) , fbsp ) ;
fwrite ( faceVertIndic es. data ( ) , sizeof ( unsigned short ) , faceVertIndic es. size ( ) , fbsp ) ;
fwrite ( outFaces . data ( ) , sizeof ( ps1bsp_face_t ) , outFaces . size ( ) , fbsp ) ;
// Update header information
outHeader . numVertices = world - > numVertices ;
outHeader . numTriangles = outTriangl es . size ( ) ;
outHeader . numFaceVertIndices = faceVertIndic es . size ( ) ;
outHeader . numFaces = outFaces . size ( ) ;
// Write final header
@ -260,7 +258,7 @@ int process_faces(const world_t* world)
fwrite ( & outHeader , sizeof ( ps1bsp_header_t ) , 1 , fbsp ) ;
fclose ( fbsp ) ;
printf ( " PS1BSP: wrote %d vertices, %d triangl es, %d faces \n " , outHeader . numVertices , outHeader . numTriangl es , outHeader . numFaces ) ;
printf ( " PS1BSP: wrote %d vertices, %d indic es, %d faces \n " , outHeader . numVertices , outHeader . numFaceVertIndic es , outHeader . numFaces ) ;
return 1 ;
}