Я хочу поместить свет в сцену, которая зафиксирована в определенном месте.Вот что сайт OpenGL может сказать по этому поводу:
Как я могу сделать свой свет фиксированным относительно моей сцены?Как я могу поместить источник света в угол и сделать так, чтобы он оставался там, пока я меняю свое представление?
При изменении вашего представления меняется и ваша матрица ModelView.Это означает, что вам нужно будет повторно указать светлое положение, обычно в начале каждого кадра.Типичное приложение будет отображать кадр со следующим псевдокодом:
- Установить преобразование вида.
- * Установить положение освещения // glLightfv (GL_LIGHT_POSITION,…) *
- Передача геометрии сцены или модели.
- Замена буферов.
Если ваш источник светаявляется частью осветительного прибора, вам также может понадобиться указать моделирующее преобразование, чтобы положение света находилось в том же месте, что и геометрия окружающего осветителя.
Поэтому я добавил это к paintGL()
функция.
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
gluLookAt(0.0, 5.0, 0.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
GLfloat l0pos[] = {0.0, 0.0, 0.0, 1.0};
glLightfv(GL_LIGHT0, GL_POSITION, l0pos);
glPopMatrix();
Кажется, когда я стою, все в порядке, но когда я перемещаю положение глаз камеры или ее центральное положение, свет мигает.Что я делаю не так?
Обновление2 : я закончил использовать этот код, но у меня все еще есть проблемы.Свет больше не движется, но его положение не точное.Матрица сверху стека - это матрица, сгенерированная командой gluLookAt
, которая представляет положение камеры.
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(xCoordinate, yCoordinate, zCoordinate);
GLfloat lpos[] = {0.0, 0.0, 0.0, w};
glLightfv(GL_LIGHT0, GL_POSITION, lpos);
glPopMatrix();