Преобразование трехмерного облака точек в Mesh с использованием tetgen
У меня есть 3D-точки:
Печатное описание featurePoints:
(std::__1::vector<Ogre::Vector3, std::__1::allocator<Ogre::Vector3> >) featurePoints = size=280 {
[0] = (x = -47.5395966, y = 67.6119384, z = -90.1876831)
[1] = (x = 66.8660736, y = 50.5408936, z = -43.5680542)
[2] = (x = -210.214737, y = 43.9654541, z = -119.74231)
[3] = (x = -306.686218, y = 45.1052246, z = -48.5334473)
[4] = (x = 51.6779327, y = 49.0754395, z = 243.174103)
[5] = (x = -167.147018, y = 43.8675537, z = -59.2402344)
[6] = (x = -174.151901, y = 66.2751465, z = 17.293396)
[7] = (x = -116.822571, y = 13.2355957, z = 143.520203)
[8] = (x = -379.923584, y = 78.4333496, z = -203.109802)
[9] = (x = 417.598999, y = 45.2637939, z = -0.0632324219)
Я пытаюсь триангулировать эти характерные точки в tetrehdarl, используя библиотеку tetgen C++.
Я использую следующий код
inp.initialize();
out.initialize();
inp.numberofpoints = featurePoints.size();
inp.pointlist = new REAL[inp.numberofpoints * 3];
for (int i = 0; i < featurePoints.size(); i++)
{
inp.pointlist[3 * i + 0] = featurePoints[i].x;
inp.pointlist[3 * i + 1] = featurePoints[i].y;
inp.pointlist[3 * i + 2] = featurePoints[i].z;
}
tetrahedralize("eeQ", &inp, &out);
Для рендеринга сетки я использую буфер вершин Ogre и буфер индексов
float *vertices = static_cast<float *>(vertexBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD));
for (int i = 0; i < out.numberofpoints; i++)
{
vertices[(i*3)] = out.pointlist[(i*3)];
vertices[(i*3)+1] = out.pointlist[(3*i)+1];
vertices[(i*3) + 2] = out.pointlist[(3*i)+2];
}
vertexBuffer->unlock();
uint16_t *indices = static_cast<uint16_t *>(indexBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD));
for (int i = 0; i<out.numberofedges; i++)
{
indices[i] = out.edgelist[i];
copyIndices.push_back(out.edgelist[i]);
}
indexBuffer->unlock();
Проблема в том, что я не получаю правильную триангулированную сетку, у меня есть некоторые отверстия в некоторых ребрах, а не закрытая сетка, некоторые ребра отсутствуют..
Вот изображение
Вот снимок экрана выходного файла obj. Выглядит совершенно неправильно