【问题标题】:Where to store the id of a VertexHandle in OpenMesh?在哪里存储 OpenMesh 中 VertexHandle 的 id?
【发布时间】:2020-10-24 22:52:55
【问题描述】:

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

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);

Point 的顶点缓冲区出现在​​下面,我将 vhandles 数据复制到此结构中,然后构建一个数组以提供给图形引擎。

struct Point
{
        float px, py, pz;   // positions
        float nx, ny, nz;   // normals
        float cx, cy, cz;   // diffuse
}

当我构建上面的vhandles 向量时,我没有向 VertexHandle 添加索引/id。

我需要在某个地方存储并使用 VertexHandle 本身访问该点的 id。我会在哪里存储它?我还没有在 VertexHandle 的源代码中找到用于此目的的字段,但似乎需要一些东西。

【问题讨论】:

  • 澄清 - 您想保存原始网格 (OpenMesh) 和您构造的 Point 数组之间的映射?
  • 没有。我只是想要一个字段来将 id 存储在原始 OpenMesh::Point 或 OpenMesh::VertexHandle 中。 Botond 有一个有趣的评论,我要评论一下。

标签: computational-geometry mesh vertex openmesh


【解决方案1】:

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

【讨论】:

  • 事实证明,索引对我来说工作得很好,虽然你说它们是在垃圾收集时重新排列的……那时(销毁时)我不再关心了。但你的回答有帮助。
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2020-08-28
  • 2018-12-23
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多