我能够在 OpenMesh 中读写非常基本的 .off 文件,但是当我使用程序 Geomview 来可视化网格时,这并不能让我很好地看到连接三角形网格顶点的边。我想出了如何更改 .off 文件以使用以下格式为我的三角形着色:http ://www.geomview.org/docs/html/OFF.html ,Geomview 接受我编写这些文件的方式。但是我似乎无法更改 OpenMesh 的 read_mesh 函数,以便它可以正确读取所有三角形面。
我尝试使用https://www.openmesh.org/media/Documentations/OpenMesh-Doc-Latest/a00212.html中的 OpenMesh::IO::Options 类以及我从Options.hh 源代码。这是我尝试做的事情:
....
#include <OpenMesh/Core/IO/Options.hh>
....
int main () {
MyMesh mesh;
...
OpenMesh::IO::Options ops(OpenMesh::IO::Options::FaceColor);
ops += OpenMesh::IO::Options::ColorFloat;
std::cout << ops.color_is_float() << std::endl; //returns true
std::cout << ops.face_has_color() << std::endl; //returns true
if (!OpenMesh::IO::read_mesh(mesh, argv[2], ops, true)) {
//when run, it does not enter this if statement
std::cerr << "Error: cannot read mesh from << argv[2] << std::endl;
}
//stuff done to mesh
std::streamsize str = 5;
if (!OpenMesh::IO::write_mesh(mesh, argv[3], ops, str) {
//again, it does not enter this if statement
std::cerr << "Error ..." << std::endl;
}
我能够编译该程序而没有任何错误,并且它可以运行。但是,read_mesh 函数无法正确完成对 .off 文件的读取。
这是我的 .off 文件的更简单版本:
OFF
30 40 0
0 0 0
0 1 0
0 2 0
... more vertices
然后我有两种写三角形面的方法:
方法1)
#_of_vertices v0 v1 v2 RGB[0] RGB[1] RGB[2]
3 0 1 6 1.0 0.0 0.0
... more faces
方法2)
#_of_vertices v0 v1 v2 #_of_color_components RGB[0] RGB[1] RGB[2]
3 0 1 6 3 1.0 0.0 0.0
.. more faces
对于方法 1,read_mesh 只读取第一个三角形面。它达到了三角形颜色的浮点值,我假设不知道如何处理它们,所以它只是停止读取值。因为当它将网格写入单独的文件时,它只列出了一个面,并且更新了该特定三面的三个顶点的位置。
对于方法 2,我得到一堆“PolyMeshT::add_face: complex vertex”错误。
我当然没有正确调整 read_mesh 函数,我想知道是否有人对我有任何指导。