在OpenMesh中何处存储VertexHandle的ID?

问题描述

我正在从OpenMesh结构构建索引和顶点缓冲区,并将其输入到渲染引擎中。在这里,我迭代我的元素(未显示)并为我的每个点创建VertexHandles,然后添加面。

docker run -it \
-v $PWD/config:/drouter/config \
-v $PWD/local:/drouter/local \
-e DATAPOWER_ACCEPT_LICENSE=true \
-e DATAPOWER_INteraCTIVE=true \
-p 9090:9090 \
-p 9022:22 \
-p 5554:5554 \
-p 8000-8010:8000-8010 \
ibmcom/datapower

std::vector<Mesh::VertexHandle> vhandles; for (... 3 triangle points) { vhandles.push_back(mesh.add_vertex(Mesh::Point( point->px,point->py,point->pz))); } mesh.add_face(face_vhandles); 的顶点缓冲区出现在​​下面,我将vhandles数据复制到此结构中,然后构建这些数组以馈送到图形引擎。

Point

在上面构建struct Point { float px,py,pz; // positions float nx,ny,nz; // normals float cx,cy,cz; // diffuse } 向量时,我没有向VertexHandle添加索引/ id。

我需要在某个地方存储,并可以通过VertexHandle iteself访问该点的ID。我将其存储在哪里?我尚未在VertexHandle的源代码中找到用于此目的的字段,但是似乎需要一些东西。

解决方法

尽管我仍然只是熟悉OpenMesh,但在我看来,按其索引访问任何元素是一种不好的做法,因为这些是内部索引,将在垃圾回收时重新安排。 OpenMesh提供迭代器和循环器以对其元素进行迭代。如果需要随机访问,则始终可以将与所需索引关联的句柄存储在容器中。此外,还有vertex_handle()face_handle()edge_handle()函数,这些函数通过其内部索引为您提供网格元素。