void CreateGeometry::visit(ColladaPolyList* polylist) { const std::vector<std::vector<int> >& primitive = polylist->getPrimitive(); for(size_t i = 0; i < primitive.size(); i++) { VertexSoup vertexSoup(polylist, primitive[i]); const std::vector<int>& vcount = polylist->getVcount(); for(size_t x = 0; x < vcount.size(); x++) { int vc = vcount[x]; int index[3]; if(!vertexSoup.hasVertex()) break; index[0] = vertexSoup.addVertex(vertexSoup.nextVertex()); if(!vertexSoup.hasVertex()) break; index[1] = vertexSoup.addVertex(vertexSoup.nextVertex()); if(!vertexSoup.hasVertex()) break; index[2] = vertexSoup.addVertex(vertexSoup.nextVertex()); vertexSoup.indices.insert(vertexSoup.indices.end(), index, index + 3); for(int i = 3; i < vc; i++) { index[1] = index[2]; if(!vertexSoup.hasVertex()) break; index[2] = vertexSoup.addVertex(vertexSoup.nextVertex()); vertexSoup.indices.insert(vertexSoup.indices.end(), index, index + 3); } } add_vertex_data(vertexSoup.vertices, vertexSoup.indices, polylist->getMaterial(), vertexSoup.flags); } }
void CreateGeometry::visit(ColladaTriangles* triangles) { const std::vector<std::vector<int> >& primitive = triangles->getPrimitive(); for(size_t i = 0; i < primitive.size(); i++) { VertexSoup vertexSoup(triangles, primitive[i]); while(vertexSoup.hasVertex()) { int index = vertexSoup.addVertex(vertexSoup.nextVertex()); vertexSoup.indices.push_back(index); } add_vertex_data(vertexSoup.vertices, vertexSoup.indices, triangles->getMaterial(), vertexSoup.flags); } }
void voxel_model::add_face(int face, const VoxelPair& p, std::vector<GLfloat>& varray, std::vector<GLubyte>& carray) { // update bounding box. if(p.first.x < aabb_[0].x) { aabb_[0].x = p.first.x; } if(p.first.y < aabb_[0].y) { aabb_[0].y = p.first.y; } if(p.first.z < aabb_[0].z) { aabb_[0].z = p.first.z; } if(p.first.x+1 > aabb_[1].x) { aabb_[1].x = p.first.x+1; } if(p.first.y+1 > aabb_[1].y) { aabb_[1].y = p.first.y+1; } if(p.first.z+1 > aabb_[1].z) { aabb_[1].z = p.first.z+1; } add_vertex_data(face, GLfloat(p.first.x), GLfloat(p.first.y), GLfloat(p.first.z), varray); // colors are all the same per vertex. for(int n = 0; n != 6; ++n) { carray.push_back(p.second.color.r()); carray.push_back(p.second.color.g()); carray.push_back(p.second.color.b()); carray.push_back(p.second.color.a()); } }