Проблема освещения Open GL - PullRequest
3 голосов
/ 03 ноября 2010

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

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

float lightv[4]; // populated with (0.6, 0.6, 0.6, 1)
float positionv[4]; // populated with (0, 10, 0, 1)
int lightID = GL_LIGHT0;
int attenuationType = GL_LINEAR_ATTENUATION;
float attenuationValue = 1;
glLightf(lightID, attenuationType, attenuationValue);
glLightfv(lightID, GL_DIFFUSE, lightv);
glLightfv(lightID, GL_POSITION, positionv);
glEnable(lightID);

Вместо того, чтобы делать то, что я ожидаю, он дает мне освещение, как будто там, где есть камера, есть свет!На каждой поверхности одинаковое освещение!

Что я делаю не так?

Спасибо, я ценю это.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

Первое, что нужно сделать, это убедиться, что в какой-то момент вам позвонили glEnable(GL_LIGHTING);.После этого, первое, что нужно проверить, это то, что ваши нормы правильны.Для правильного освещения необходимо иметь нормальный набор для каждой нарисованной вершины.Если вы уже установили свои нормали, вы должны убедиться, что все они имеют единицу длины.Если они не имеют длины один, освещение может действовать странно.Если это все так, как должно быть, вы должны помнить, что когда вы устанавливаете положение источника света, он изменяется текущей матрицей Modelview, как если бы это была вершина.Если ни одна из этих вещей не имеет отношения, я посмотрю, смогу ли я придумать что-то еще.

0 голосов
/ 03 ноября 2010

Установите ваше положение освещения после , когда вы настроили преобразование GL_MODELVIEW, так как оно зависит от текущей матрицы преобразования. В противном случае вы получите эффект «фары», который вы обнаружили.

...