В настоящее время я работаю над моделированием материала, подобного ткани, и затем отображаю результаты с помощью Open Scene Graph.Я получил настройку для отображения чего-то похожего на ткань, просто сбросив все вершины в 1 Vec3Array и затем отобразив их с помощью стандартного DrawArrays на основе точек.Однако я пытаюсь добавить грани между вершинами, чтобы дальнейшая часть моего приложения могла визуально видеть ткань.
Это то, что я сейчас пытаюсь сделать для PrimitiveSet
// create and add a DrawArray Primitive (see include/osg/Primitive). The first
// parameter passed to the DrawArrays constructor is the Primitive::Mode which
// in this case is POINTS (which has the same value GL_POINTS), the second
// parameter is the index position into the vertex array of the first point
// to draw, and the third parameter is the number of points to draw.
unsigned int k = CLOTH_SIZE_X;
unsigned int n = CLOTH_SIZE_Y;
osg::ref_ptr<osg::DrawElementsUInt> indices = new osg::DrawElementsUInt(GL_QUADS, (k) * (n));
for (uint y_i = 0; y_i < n - 1; y_i++) {
for (uint x_i = 0; x_i < k - 1; x_i++) {
(*indices)[y_i * k + x_i] = y_i * k + x_i;
(*indices)[y_i * (k + 1) + x_i] = y_i * (k + 1) + x_i;
(*indices)[y_i * (k + 1) + x_i + 1] = y_i * (k + 1) + x_i + 1;
(*indices)[y_i * k + x_i] = y_i * k + x_i + 1;
}
}
geom->addPrimitiveSet(indices.get());
Это, однако, приводит к повреждению памяти во время работы, и я недостаточно хорошо разбираюсь в коде на ассемблере, чтобы расшифровать, что он пытается сделать неправильно, когда CLion дает мне дизассемблированный код.
Я думал, что я буду повторятьсякаждой из граней моей ткани, а затем выберите 4 индекса вершин, которые принадлежат ей.Вершины вводятся сверху вниз по порядку справа налево.Итак:
0 1 2 3 ... k-1
k k+1 k+2 k+3 ... 2k-1
2k 2k+1 2k+2 2k+3 ... 3k-1
...
Кто-нибудь сталкивался с этим конкретным вариантом использования ранее и, возможно, у него / нее есть решение моей проблемы?Любая помощь будет принята с благодарностью.