如何使用OpenMesh设置脸部颜色?

时间:2019-09-17 14:20:36

标签: c++ openmesh

我试图只设置某张面孔的面孔颜色,而我的代码不断抛出错误。

mesh.set_color(*f_it, clr);行引发错误(有关属性错误的信息)。我尝试将其更改为mesh.set_color(f_it.handle(), clr);,但这会引发取消引用错误。

我要正确设置颜色吗?

typedef OpenMesh::TriMesh_ArrayKernelT<> myMesh;
myMesh * Mesh;
myMesh mesh;

void computeFaceNormals(myMesh mesh) {
    OpenMesh::Vec3f pointA, pointB, pointC;
    myMesh::VertexIter vlt, vBegin, vEnd;
    myMesh::ConstFaceVertexIter cfvlt;
    myMesh::Color clr;

    for (myMesh::FaceIter f_it = mesh.faces_begin(); f_it != mesh.faces_end(); f_it++) {
        cfvlt = mesh.cfv_iter(*f_it);
        pointA = mesh.point(*cfvlt);
        pointB = mesh.point((*cfvlt++));
        pointC = mesh.point((*cfvlt++));

        clr[0] = 0;
        clr[1] = 1;
        clr[2] = 0;

        mesh.set_color(*f_it, clr);
    }

}

1 个答案:

答案 0 :(得分:1)

openmesh网格(OpenMesh::TriMesh_ArrayKernelT可以工作,它具有不同的属性:顶点颜色,面颜色,顶点法线等。但是,您需要明确指定您想要网格物体具有的属性。

在您的情况下,您所缺少的是 mesh.request_face_colors();

如果收到网格作为参数,则可以使用以下方法检查其是否已经具有颜色属性: mesh.has_face_colors()

您还可以使用以下方法删除属性: mesh.release_face_colors();

Read the tutorial for more details.(从本教程开始),您应该考虑一个重要说明,以阐明request / has / release的用法:

  

但是,如果顶点状态属性为   请求两次?然后第一个版本什么都不做,但是第二个   一个会删除它。标准属性有一个参考计数器,   对于每个请求,该值增加1,然后减少1   对于每个版本。如果计数器达到0,则该属性为   从内存中删除。