opengl — c ++ Освещение нескольких объектов

введите описание изображения здесь

на рисунке вы видите белую точку, в которой расположен источник света. Правый объект горит правильно, а левый — нет.

GLfloat LightPosition[] = {0.0f,0.0f,1.0f,0.0};
void render()
{
::clearScreen(); // clear screen
::camera->update(); //changes matrix for camera

glPushMatrix();
glRotatef(x,0,1,0);
glTranslatef(0,0,1);
glBegin(GL_POINTS); // draw white dot
glVertex3f(LightPosition[0],LightPosition[1],LightPosition[2]);
glEnd();

glLightfv (GL_LIGHT0,GL_POSITION,LightPosition); // position light
::glPopMatrix();

::m2->draw(); // draw king chess piece

::glPushMatrix();
glTranslatef(4,0,0);
m1->draw(); // draw sphere
::glPopMatrix();

glFlush();
glutSwapBuffers();
}

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

1

Решение

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

Установить w координаты до 1 т имеют точечный светильник:

GLfloat LightPosition[] = {0.0f,0.0f,1.0f,1.0};
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]