vcg.vertex.Curvature是VCGLib中的一个类,用于计算顶点曲率信息。该类提供了计算顶点曲率和平均曲率的方法。
void reset(void)
该方法用于重置曲率信息。
void compute(void)
该方法用于计算顶点曲率信息。
float weightedCurvature(void)
该方法返回顶点的加权曲率,用于弯曲光滑处理等。
short valence
该属性表示顶点的度。
float meanCurvature
该属性表示顶点的平均曲率。
float gaussianCurvature
该属性表示顶点的高斯曲率。
float relaxation
该属性表示曲率放宽参数。
float weight
该属性表示顶点的权重。
以下示例代码演示了如何使用vcg.vertex.Curvature计算顶点的曲率信息。
#include <iostream>
#include <vector>
#include <vcg/complex/complex.h>
#include <vcg/complex/algorithms/update/topology.h>
#include <vcg/complex/algorithms/update/curvature.h>
using namespace vcg;
class MyVertex;
class MyEdge;
class MyFace;
struct MyUsedTypes : public UsedTypes<Use<MyVertex>::AsVertexType, Use<MyEdge>::AsEdgeType, Use<MyFace>::AsFaceType>{};
class MyVertex : public Vertex<MyUsedTypes, vertex::Coord3f, vertex::Curvature<MyVertex>{}}>
{
public:
vcg::Point3f normal;
};
class MyEdge : public Edge<MyUsedTypes>{};
class MyFace : public Face<MyUsedTypes>{};
class MyMesh : public vcg::tri::TriMesh<std::vector<MyVertex>, std::vector<MyFace>> {};
int main()
{
MyMesh mesh;
// 初始化顶点坐标
MyMesh::VertexIterator vi = vcg::tri::Allocator<MyMesh>::AddVertices(mesh, 3);
(*vi).P() = vcg::Point3f(0, 0, 0);
(*++vi).P() = vcg::Point3f(1, 0, 0);
(*++vi).P() = vcg::Point3f(0, 1, 0);
// 更新拓扑信息
vcg::tri::UpdateTopology<MyMesh>::VertexFace(mesh);
vcg::tri::UpdateTopology<MyMesh>::VertexFaceNormal(mesh);
// 计算顶点曲率信息
vcg::tri::UpdateCurvature<MyMesh>::MeanWithTensor(mesh);
vcg::tri::UpdateCurvature<MyMesh>::Gaussian(mesh);
// 输出结果
for (auto &v : mesh.vert){
std::cout << "Vertex: " << &v - &*mesh.vert.begin() << std::endl;
std::cout << " Point: " << v.P() << std::endl;
std::cout << " Mean curvature: " << v.cMean() << std::endl;
std::cout << " Gaussian curvature: " << v.cGauss() << std::endl;
}
return 0;
}