OpenGL GL_QUAD_STRIP исчезает с glColor3f () - PullRequest
3 голосов
/ 26 марта 2011

Я рисую 2 квадрата рядом друг с другом с помощью glColor3f () и GL_QUAD_STRIP, но кажется, что они затеняют цвета между 2 квадратами, есть ли способ предотвратить это? Или GL_QUAD_STRIP просто не предназначен для такого рода вещей? Более подходящим будет GL_QUADS, но это слишком просто.

glBegin(GL_QUAD_STRIP);

glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(2.0f, 0.0f, 0.0f);
glVertex3f(2.0f, 1.0f, 0.0f);
glColor3f(1.0f, 1.0f, 1.0f);

glEnd();

Ответы [ 2 ]

7 голосов
/ 26 марта 2011

Как правило, цвета прикрепляются к каждой вершине, а не к каждой четверке. Таким образом, поскольку 2 вершины разделены между двумя квадраторами вашей полосы, вы получаете цвет, используемый для обоих (и для наблюдаемого "затухания". Это называется интерполяцией).

Теперь, в вашем конкретном случае, существует, однако, режим OpenGL, который помогает: вы можете указать OpenGL вообще не интерполировать цвета, а получить только цвет последней вершины каждого примитива (здесь квадраторов) для полного примитивно.

Это делается с в следующем состоянии :

glShadeModel(GL_FLAT);
0 голосов
/ 16 апреля 2011

Каждый раз, когда вы делаете вызов glColor3f, он будет ассоциировать этот цвет с каждой вершиной, пока вы не сделаете другой вызов вызова glColor3f с другим цветом. Я бы использовал GL_QUADS и разбил бы его на два отдельных четырехугольника следующим образом (по часовой стрелке, я считаю):

glBegin(GL_QUADS);

glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);

glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(2.0f, 1.0f, 0.0f);
glVertex3f(2.0f, 0.0f, 0.0f);

glEnd();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...