OpenGL освещение с glOrtho - PullRequest
       13

OpenGL освещение с glOrtho

3 голосов
/ 17 июня 2011

Итак, у меня есть 3D-объект, который я рисую с использованием следующего источника света:

    GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 0.9};  /* White light. */
GLfloat light_position[] = {300.0, 300.0, 300.0, 0.0};  
glShadeModel(GL_SMOOTH);
glEnable(GL_COLOR_MATERIAL);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);

Мой объект освещается так, как я ожидаю, когда рисую его в «нормальном» контексте (т.е. без glOrtho).

Однако я работаю над ортогональной проекцией объекта и использую для этой цели glOrtho (в матрице ModelView).Я инициализирую источник света после вызова glOrtho, затем рисую объект точно так же, как и в случае, который работал (случай 3D).Но по какой-то причине освещение не работает на ортогональных проекциях, то есть когда-то я сделал вызов glOrtho.

Это не проблема с нормалями, поскольку она работает в трехмерном случае.Я предполагаю, что с вызовом glOrtho все спрессовывается вместе на тонком слое, что объясняет, почему свет не ведет себя так, как ожидалось ... но, честно говоря, у меня нет опыта освещения, поэтому это может быть неправильно.

Кто-нибудь знает, что происходит?

1 Ответ

1 голос
/ 17 июня 2011

Освещение происходит в глазном пространстве, то есть перед тем, как проекция вообще применяетсяВы, вероятно, неправильно используете матрицы преобразований.glOrtho, glFrustung или gluPerspective идут в матрицу GL_PROJECTION, gluLookAt и другие элементы размещения камеры попадают в GL_MODELVIEW.

...