на рисунке вы видите белую точку, в которой расположен источник света. Правый объект горит правильно, а левый — нет.
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();
}
я понимаю, что я просто освещаю оба объекта, как будто они были в центре мира, а затем я перемещаю объект влево, вызывая этот эффект. Как мне обойти это и правильно освещать мои объекты?
Ваш источник света не имеет положения, он имеет только направление и, следовательно, не зависит от переводов. Кроме того, процессор вершин не будет вычислять направление от источника к вершине для направленного света.
Установить w
координаты до 1 т имеют точечный светильник:
GLfloat LightPosition[] = {0.0f,0.0f,1.0f,1.0};
Других решений пока нет …