Я пытаюсь визуализировать примитивы в обычном режиме заполнения, а затем в виде каркаса.
Код рендеринга:
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.9f, 0.9f, 0.9f, 1);
// reset matrix
glLoadIdentity();
// fill display list
glColor3c(150, 255, 255);
glCallList(lDList);
// wireframe display list
glColor3f(0, 0, 0);
glLineWidth(10);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINES);
glCallList(lDList);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
Код создания списка отображения:
lDList = glGenLists(1);
glNewList(lDList, GL_COMPILE);
glBegin(GL_QUADS);
glVertex3i(-1, -1, 0);
glVertex3i(1, -1, 0);
glVertex3i(1, -1, -25);
glVertex3i(-1, -1, -25);
glEnd();
glEndList();
glColor3c Макрос:
#define glColor3c(r, g, b) glColor3f(r / 255, g / 255, b / 255)
Я ожидаю нарисовать плоскость голубого цвета с черной рамкой вокруг нее, но все, что происходит, это то, что во второй раз, когда я отображаю список отображения, он просто заполняет и рисует всю вещь, перезаписывая пиксели для другого примитива. Я получаю плоскость, которую хочу нарисовать, но она просто черная (цвет, который я указала для линии «версия»).
Любая другая информация, которая может быть полезна, это то, что я использую SDL в Windows 7 с
MSVC ++ 2010. Я не делаю любой вызывает glEnable, поэтому у меня не включены странные настройки, которые могли бы испортить его или, возможно, решить проблему. Мой единственный установочный код OpenGL устанавливает матрицу проекции и просмотра модели, а затем создает список отображения.
Очевидно, мой вопрос: почему я рисую список отображения во второй раз, когда он заполняет примитив вместо создания линий? Как это исправить?
Согласно документам для glPolygonMode
в OpenGL 4.0, второй аргумент, mode
может быть только один из GL_FILL
, GL_POINT
, или же GL_LINE
, В вашем примере вы проходите GL_LINES
, что является совершенно другим значением перечисления.
Я подозреваю, что прохождение GL_LINES
обрабатывается OpenGL так, что по умолчанию возвращается GL_FILL
если принятый режим не то, что он ожидает.
Также обратите внимание: спецификация для glPolygonMode
то же самое обратно через OpenGL 2.1.
Других решений пока нет …