Тесселяция — сохранение данных

Я использую тесселяцию, чтобы перевести не треугольные многоугольники в треугольные многоугольники.
Я пытаюсь сохранить данные в переменной и запустить код тесселяции один раз при сохранении данных. Код использует сохраненные данные, чтобы нарисовать их в функции рисования.

Я пытаюсь нарисовать звездный многоугольник, проблема в том, что я могу видеть некоторые треугольники, но не звезду. Почему при сохранении данных рисунок идет не так?

Вот код инициализации:

#define callback void(CALLBACK*)()
void Init()
{
GLdouble star[5][6] = /* star data, The data is 100% perfect */glColor3f(0.0f, 1.0f, 0.0f);

GLUtesselator *pTess = gluNewTess();

indexNum = 0;
gluTessCallback(pTess, GLU_TESS_BEGIN,      (callback)glDrowMode);
gluTessCallback(pTess, GLU_TESS_VERTEX,     (callback)saveData);
gluTessCallback(pTess, GLU_TESS_ERROR,      (callback)tessError);
gluTessCallback(pTess, GLU_TESS_COMBINE,    (callback) scbCombine);gluTessProperty(pTess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO);
gluTessBeginPolygon(pTess, NULL);

gluTessBeginContour(pTess);
for(int i = 0; i < 5; i++)
gluTessVertex(pTess, star[i], star[i]);
gluTessEndContour(pTess);

gluTessEndPolygon(pTess);
gluDeleteTess(pTess);
}

Сохранение кода данных и сохранение режима рисования:

struct vecStruct
{
GLdouble *vertex, *color;
};
vecStruct vec[16];int indexNum = 0;
void CALLBACK saveData(const GLvoid *ptr)
{
const GLdouble *data = (const GLdouble*)ptr;

vec[indexNum].vertex = new GLdouble[3];
vec[indexNum].color = new GLdouble[3];
vec[indexNum].vertex[0] = data[0];
vec[indexNum].vertex[1] = data[1];
vec[indexNum].vertex[2] = data[2];
vec[indexNum].color[0] = data[3];
vec[indexNum].color[1] = data[4];
vec[indexNum].color[2] = data[5];

indexNum++;
}GLenum drawMode;
void CALLBACK glDrowMode(GLenum where)
{
drawMode = where;
}

И последняя функция дроу:

void vboDraw()
{
glBegin(drawMode);
for (int i = 0; i < indexNum; i++)
{
glColor3dv(vec[i].color);
glVertex3dv(vec[i].vertex);
}
glEnd();

}

Как я уже сказал, я должен увидеть звезду:

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

Но я вижу несколько треугольников:

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

Что не так с кодом?
Почему я не могу сохранить данные для выполнения кода тесселяции только один раз?

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]