我能够在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源代码中读取的内容来更改read_mesh和write_mesh函数。这是我尝试做的事情:
....
#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功能,我想知道是否有人对我有任何指导。
答案 0 :(得分:0)
我知道这个问题已经很老了,但是以防万一有人搜索答案;在您的OFF文件示例中,存在两个主要问题:
COFF
而不是OFF
引入包含颜色的OFF文件。否则,读者会感到困惑,并且仍然会误解文件中包含的颜色信息。这应该是您复杂的顶点错误的原因。