Проблема с освещением OpenGL при повороте камеры

StackOverflow https://stackoverflow.com/questions/1917776

  •  20-09-2019
  •  | 
  •  

Вопрос

Я рисую здания в своем игровом мире, я заштриховываю их с помощью следующего кода:

GLfloat light_ambient[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat light_position[] = {135.66f, 129.83f, 4.7f, 1.0f};

glShadeModel(GL_SMOOTH);

glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

glColorMaterial(GL_FRONT, GL_AMBIENT);

Это прекрасно работает.

Но когда я начинаю летать по миру, освещение реагирует на это так, как если бы мир был объектом, который вращается.Таким образом, освещение меняется, когда меняется угол обзора моей камеры.

Как мне отменить это вращение?таким образом, освещение будет думать, что я на самом деле не вращаю мир, и тогда я мог бы придать своим зданиям статическое затенение, которое менялось бы в зависимости от положения солнца на небе.

Редактировать:вот код рендеринга:

int DrawGLScene()
{

    // stuff

    glLoadIdentity();

    glRotatef(XROT, 1.0f, 0.0f, 0.0f);
    glRotatef(YROT, 0.0f, 1.0f, 0.0f);
    glRotatef(ZROT, 0.0f, 0.0f, 1.0f);

    glTranslatef(-XPOS, -YPOS, -ZPOS);

    // draw world
}
Это было полезно?

Решение

http://www.opengl.org/resources/faq/technical/lights.htm

Смотрите #18.050

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

Другие советы

Я полагаю, что ваша проблема возникает из-за того факта, что источники света OpenGL указаны в мировых координатах, но хранятся внутри в координатах камеры.Это означает, что как только вы разместите источник света, всякий раз, когда вы перемещаете камеру, ваш источник света будет перемещаться вместе с ней.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top