#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. Как оказалось, индексы будут работать для меня просто отлично, и хотя вы говорите, что они перестраиваются при сборке мусора… в этот момент (при уничтожении) Мне больше все равно. Но ваш ответ помогает.