Преобразование трехмерного облака точек в 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. Выглядит совершенно неправильно

введите описание изображения здесь

0 ответов

Другие вопросы по тегам