VCGで色のついたポリゴンを表示する方法。
今回はplyファイルを使用。
※あと書くのも恥ずかしいけれど上記3ファイルはパブリックドメイン扱いとします。
面に色情報を持つデータを使用する場合、MyFaceで色情報を持つことを定義する。
class MyFace; class MyVertex; class MyEdge; struct MyUsedTypes : public vcg::UsedTypes< /*省略*/> {}; class MyVertex : public vcg::Vertex< /*省略*/> {}; class MyFace : public vcg::Face < MyUsedTypes, vcg::face::VertexRef, vcg::face::Color4b, vcg::face::Normal3f, vcg::face::Mark, vcg::face::BitFlags > { }; class MyEdge : public vcg::Edge< /*省略*/> {}; class MyMesh : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace>, std::vector<MyEdge> > { };
vcg::tri::io::ImporterPLY<MyMesh>::Open(mesh, "napple_face_color_0.ply");
色情報は C().X() , C().Y() C().Z() にそれぞれR,G,Bが入っている。cCはconst用。
上でvcg::face::Color4bを指定したので、unsigned char型で入っている。従ってOpenGLのglColor3ubを使用する。
glBegin(GL_TRIANGLES); for (const auto& f : mesh.face) { glColor3ub(f.cC().X(), f.cC().Y(), f.cC().Z()); for (size_t i = 0; i < 3; i++) { glVertex3d(f.cV(i)->cP().X(), f.cV(i)->cP().Y(), f.cV(i)->cP().Z()); } } glEnd();
頂点に色情報がある場合、MyVertexにColor4bを指定する。
class MyVertex : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Color4b, vcg::vertex::Normal3f, vcg::vertex::Qualityf, vcg::vertex::BitFlags, vcg::vertex::Mark > { };
vcg::tri::io::ImporterPLY<MyMesh>::Open(mesh, "napple_vertex_color.ply");
色情報はvertexの中に入っています。それ以外は面の時と同じです。
glBegin(GL_TRIANGLES); for (const auto& f : mesh.face) { for (size_t i = 0; i < 3; i++) { const MyVertex* pV = f.cV(i); glColor3ub(pV->cC().X(), pV->cC().Y(), pV->cC().Z()); glVertex3d(pV->cP().X(), pV->cP().Y(), pV->cP().Z()); } } glEnd();
VCG LibraryのBall Pivotingでメッシュ生成
VCG Library ターゲットの周辺のオブジェクトを取得