void RasterizeModelGeometry(RasterData* raster, const Module& model, const Matrix44f& objectTM, uint geomIdx) { const Module::Geometry& geometry = model.GetGeometry(geomIdx); const uint lastPolygon = geometry.firstPolygon + geometry.numPolygons; for (uint polyIdx = geometry.firstPolygon; polyIdx != lastPolygon; ++polyIdx) { const uint numVertices = model.GetPolygonNumVertices(polyIdx); Trianglef triangle; triangle.v0 = model.GetVertex(model.GetPolygonVertexIndex(polyIdx, 0)); triangle.v1 = model.GetVertex(model.GetPolygonVertexIndex(polyIdx, 1)); for (uint vertIdx = 2; vertIdx < numVertices; ++vertIdx) { triangle.v2 = model.GetVertex(model.GetPolygonVertexIndex(polyIdx, vertIdx)); Trianglef transTriangle = triangle; transTriangle.v0 = Mul(triangle.v0, objectTM); transTriangle.v1 = Mul(triangle.v1, objectTM); transTriangle.v2 = Mul(triangle.v2, objectTM); RasterizeTriangle(raster, transTriangle); triangle.v1 = triangle.v2; } } }
void DrawModelGeometry(const Module& model, uint geomIdx) { const Module::Geometry& geometry = model.GetGeometry(geomIdx); glBegin(GL_LINES); const uint lastPolygon = geometry.firstPolygon + geometry.numPolygons; for (uint polyIdx = geometry.firstPolygon; polyIdx != lastPolygon; ++polyIdx) { const uint numVertices = model.GetPolygonNumVertices(polyIdx); const Vector3f first = model.GetVertex(model.GetPolygonVertexIndex(polyIdx, 0)); Vector3f last = first; for (uint vertIdx = 1; vertIdx < numVertices; ++vertIdx) { const Vector3f cur = model.GetVertex(model.GetPolygonVertexIndex(polyIdx, vertIdx)); glVertex3fv(&last.x); glVertex3fv(&cur.x); last = cur; } glVertex3fv(&last.x); glVertex3fv(&first.x); } glEnd(); }