我试图只设置某张面孔的面孔颜色,而我的代码不断抛出错误。
第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);
}
}
答案 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,则该属性为 从内存中删除。