http://vcg.isti.cnr.it/vcglib/trimesh__smooth_8cpp_source.html
VCG Libraryでスムージングするには、VertexCoordPasoDoble関数を使います。公式のサンプルにあるように
vcg::tri::Clean<MyMesh>::RemoveDuplicateVertex(mesh); vcg::tri::Clean<MyMesh>::RemoveUnreferencedVertex(mesh); vcg::tri::UpdateTopology<MyMesh>::VertexFace(mesh);
が必要です。
さらに、 VertexCoordPasoDoble 関数内で、
RequireVertexCompactness<MeshType>(m); RequireFaceCompactness<MeshType>(m); RequireEdgeCompactness<MeshType>(m); RequireTetraCompactness<MeshType>(m);
とチェックが入っているので、
vcg::tri::Allocator<MyMesh>::CompactVertexVector(mesh); vcg::tri::Allocator<MyMesh>::CompactEdgeVector(mesh);
等が必要になる場合があります
vcg::tri::Clean<MyMesh>::RemoveDuplicateVertex(mesh); vcg::tri::Clean<MyMesh>::RemoveUnreferencedVertex(mesh); vcg::tri::UpdateTopology<MyMesh>::VertexFace(mesh); vcg::tri::Allocator<MyMesh>::CompactVertexVector(mesh); vcg::tri::Allocator<MyMesh>::CompactEdgeVector(mesh); int Step = 2; int NormalSmoothStep=3; float Sigma=0.5; int FitStep=4; for (int i = 0; i < Step; ++i) { vcg::tri::UpdateNormal<MyMesh>::PerFaceNormalized(mesh); vcg::tri::Smooth<MyMesh>::VertexCoordPasoDoble( mesh, NormalSmoothStep, Sigma, FitStep ); }
VCG LibraryのBall Pivotingでメッシュ生成
VCG Library ターゲットの周辺のオブジェクトを取得