2015-04-29 5 views
0

У меня проблема с моим проектом игры OpenGL. Я определенные массивы с легкими свойствами:Opengl, вращающаяся сцена со стационарным светом

GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; 
GLfloat mat_shininess[] = { 50.0 }; 
GLfloat light_position[] = { 3.0, 20.0, 3.0, 0.0 }; 

я использую его:

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); 
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); 
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 

glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 

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

Я определил мой класс камеры и обновления метод:

void update() 
{ 
    glLoadIdentity(); 
    x = dist * sin(alpha) + 3; 
    z = dist * cos(alpha) + 3; 
    gluLookAt(x, y, z, 3, 5, 3, 0, 1, 0); 
    if (y <= 1) y = 1; 

    cout << "x " << x << "y: " << y << "z: " << z << "dist: " << dist << endl; 
    glutPostRedisplay(); 
} 

Центральная точка моей сцены (3,5,3). Я хочу повернуть сцену вокруг этой точки и ее работы. Но у меня проблема с огнями - его также «вращение» - я не знаю, как это описать.

Я хочу простой освещение и камера вращение вокруг пункт.

ответ

1

Фиксированная функция GL сохраняет положение света в пространство для глаз. Для этого положение света умножается на текущую матрицу ModelView во время вызова glLightfv(..., GL__POSITION, ...). Если вы переместите камеру без повторного указания положения света, она имеет эффект света, который остается неподвижным относительно камеры.

Если вы хотите, чтобы свет был неподвижным в мире, вам нужно загрузить матрицу вида (и только матрицу вида) и указать положение космического света в мире всякий раз, когда изменяется матрица вида.

 Смежные вопросы

  • Нет связанных вопросов^_^