Контур невыпуклого многоугольника в OpenGL - PullRequest
0 голосов
/ 16 декабря 2010

Я пытаюсь нарисовать контур невыпуклого многоугольника в OpenGL, но у меня не получается, поэтому возникает вопрос.
В основном я делаю тесселяцию многоугольника и создаю список отображения изтот.Затем я рисую его дважды, один раз заполненный, затем только линии.Итак, вот код, который у меня есть, пока:

GLUtriangulatorObj *tess = gluNewTess();

gluTessCallback(tess, GLU_TESS_BEGIN, (void (__stdcall*)(void))tessBeginCB);
gluTessCallback(tess, GLU_TESS_END, (void (__stdcall*)(void))tessEndCB);
gluTessCallback(tess, GLU_TESS_ERROR, (void (__stdcall*)(void))tessErrorCB);
gluTessCallback(tess, GLU_TESS_VERTEX, (void (__stdcall*)())tessVertexCB);

GLuint poly = glGenLists(1);
glNewList(poly, GL_COMPILE);

gluTessBeginPolygon(tess, NULL);
gluTessBeginContour(tess);

// calls to gluTessVertex(tess, v, v); to add vertices

gluTessEndContour(tess);
gluTessEndPolygon(tess);
gluDeleteTess(tess);

glEndList();


// DRAW
glPolygonOffset(1.0, 1.0);
glEnable(GL_POLYGON_OFFSET_FILL);
glCallList(poly);
glDisable(GL_POLYGON_OFFSET_FILL);

glColor3ub(255, 0, 0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glCallList(poly);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

Очевидно, я получаю обведенный контур и все внутренние линии.
Итак, как мне удалить эти внутренние линии?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 декабря 2010

Нарисуйте треугольники, заполненные, как вы делаете сейчас, но нарисуйте контур, не разрывая многоугольник.

0 голосов
/ 16 декабря 2010

Нарисуйте многоугольник черным. Затем снова нарисуйте многоугольник, как правило, с небольшим смещением по оси Z и немного меньшим. У тебя будет черный контур.

Редактировать: На самом деле вы указываете контур многоугольника как набор вызовов gluTessVertex. Так что просто визуализируйте эти вершины как GL_LINE_STRIP.

...