Ejemplo n.º 1
0
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);
	}
}
Ejemplo n.º 2
0
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);
	}
}
Ejemplo n.º 3
0
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());
	}
}