vcg.vertex.Curvature

vcg.vertex.Curvature是VCGLib中的一个类,用于计算顶点曲率信息。该类提供了计算顶点曲率和平均曲率的方法。

方法

vcg::vert::Curvature<PointType>::reset

void reset(void)

该方法用于重置曲率信息。

vcg::vert::Curvature<PointType>::compute

void compute(void)

该方法用于计算顶点曲率信息。

vcg::vert::Curvature<PointType>::weightedCurvature

float weightedCurvature(void)

该方法返回顶点的加权曲率,用于弯曲光滑处理等。

属性

vcg::vert::Curvature<PointType>::valence

short valence

该属性表示顶点的度。

vcg::vert::Curvature<PointType>::meanCurvature

float meanCurvature

该属性表示顶点的平均曲率。

vcg::vert::Curvature<PointType>::gaussianCurvature

float gaussianCurvature

该属性表示顶点的高斯曲率。

vcg::vert::Curvature<PointType>::relaxation

float relaxation

该属性表示曲率放宽参数。

vcg::vert::Curvature<PointType>::weight

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;
}