Рисование в OpenGL всегда белое

#python #opengl

#python #opengl

Вопрос:

Я пытаюсь нарисовать несколько простых треугольников в OpenGL. Проблема в том, что мой треугольник всегда белый, поэтому я добавляю некоторый цвет с помощью функции glColor3f:

 def OnDraw(self):

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glClearColor(.1, 0.1, 0.1, 1.0)

    glBegin (GL_TRIANGLES)
    glColor3f (1.0, 0.0, 0.0)
    glVertex2f (0.25, 0.25)
    glColor3f (0.0, 1.0, 0.0)
    glVertex2f (0.12, 0.25)
    glColor3f (0.0, 0.0, 1.0)
    glVertex2f (0.25, 0.4)
    glEnd()
  

и вот моя инициализация:

 def InitGL(self):
    # set viewing projection
    glMatrixMode(GL_PROJECTION)
    glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0)

    # position viewer
    glMatrixMode(GL_MODELVIEW)
    glTranslatef(0.0, 0.0, -2.0)

    glEnable(GL_DEPTH_TEST)
    glEnable(GL_LIGHTING)
    glEnable(GL_LIGHT0)
  

Есть идеи?

Ответ №1:

При включенном освещении цвета вершин больше не учитываются при вычислениях. Вместо этого вам нужно установить свойства материала. Однако цвета вершин довольно удобны, поэтому есть способ использовать цвета вершин для задания свойств материала.

 glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
  

Однако обратите внимание, что для работы освещения вы должны предоставить нормали к вершинам, иначе все будет выглядеть странно. Возможно, на данный момент лучше отключить освещение.

На другом примечании: пожалуйста, прекратите использовать старый и устаревший немедленный режим, конвейер исправленных функций OpenGL.Вместо этого изучите современный OpenGL. Я рекомендую http://arcsynthesis.org/gltut для начала.

Комментарии:

1. Спасибо datenwold. Очень хорошая ссылка!

Ответ №2:

Я решил проблему, которую я удалил: glEnable(GL_DEPTH_TEST) glEnable(GL_LIGHTING) glEnable (GL_LIGHT0)

Может кто-нибудь объяснить мне, почему это работает сейчас?