Где хранить идентификатор дескриптора вершины в OpenMesh?

#computational-geometry #mesh #vertex #openmesh

#вычислительная геометрия #сетка #вершина #openmesh

Вопрос:

Я создаю буферы индексов и вершин из структур OpenMesh, которые я буду загружать в свой механизм рендеринга. Здесь я перебираю свои элементы (не показаны) и создаю дескрипторы вершины для каждой из моих точек, а затем добавляю грань.

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

Буфер вершин для a Point отображается ниже, и я копирую данные vhandles в эту структуру, затем создаю из них массив для отправки в графический движок.

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

Когда я строил vhandles вектор выше, я не добавлял индекс / идентификатор к дескриптору VERTEX.

Мне нужно где-то хранить и иметь доступ к идентификатору точки с помощью самого дескриптора вершины. Где я должен это хранить? Я еще не нашел поле для этой цели в источнике дескриптора vertex, но, похоже, это необходимо.

Комментарии:

1. Уточнение — вы хотите сохранить сопоставление между исходной сеткой (OpenMesh) и созданным вами массивом Point ?

2. Нет. Мне просто нужно поле для хранения идентификатора в исходном OpenMesh::Point или OpenMesh::VertexHandle . У Botond есть интересный комментарий, который я собираюсь прокомментировать.

Ответ №1:

Хотя я все еще только знакомлюсь с OpenMesh, мне кажется плохой практикой обращаться к любому элементу по их индексу, потому что это внутренние индексы, которые будут переставлены при сборке мусора. OpenMesh предоставляет итераторы и циркуляторы для итерации по его элементам. Если вам нужен произвольный доступ, вы всегда можете сохранить дескрипторы, связанные с любым индексом, который вы хотите, в контейнере. Кроме того, существуют функции vertex_handle() , face_handle() , edge_handle() , которые дают вам элементы сетки по их внутренним индексам.

Комментарии:

1. Как оказалось, индексы будут работать для меня просто отлично, и хотя вы говорите, что они перестраиваются при сборке мусора… в этот момент (при уничтожении) Мне больше все равно. Но ваш ответ помогает.