1
我想了解改變opengl中指向光源位置的效果,但遇到問題。有人可以解釋不同的位置如何影響模型的照明?如何在opengl中設置光源的位置?
我使用的代碼如下 -
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLfloat lightPos0[] = {0.0f,0.0f, -1.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);
//gluLookAt(0, 6, 6.0, 0, -2, 0, 0.0f, 1.0f, 0.0f);
glTranslatef(0,0,-6);
GLfloat ambientColor[] = {0.1f, 0.1f, 0.1f, 1.0f};
glRotatef(50,1,0,0);
glRotatef(-45,0,1,0);
glBegin(GL_QUADS);
glNormal3f(-1,0,0);
glColor3f(0, 0, 0); glVertex3f(-1, -1, -1);
glColor3f(0, 0, 1); glVertex3f(-1, -1, 1);
glColor3f(0, 1, 1); glVertex3f(-1, 1, 1);
glColor3f(0, 1, 0); glVertex3f(-1, 1, -1);
glNormal3f(1,0,0);
glColor3f(1, 0, 0); glVertex3f(1, -1, -1);
glColor3f(1, 0, 1); glVertex3f(1, -1, 1);
glColor3f(1, 1, 1); glVertex3f(1, 1, 1);
glColor3f(1, 1, 0); glVertex3f(1, 1, -1);
glNormal3f(0,-1,0);
glColor3f(0, 0, 0); glVertex3f(-1, -1, -1);
glColor3f(0, 0, 1); glVertex3f(-1, -1, 1);
glColor3f(1, 0, 1); glVertex3f(1, -1, 1);
glColor3f(1, 0, 0); glVertex3f(1, -1, -1);
glNormal3f(0,0,-1);
glColor3f(0, 0, 0); glVertex3f(-1, -1, -1);
glColor3f(0, 1, 0); glVertex3f(-1, 1, -1);
glColor3f(1, 1, 0); glVertex3f(1, 1, -1);
glColor3f(1, 0, 0); glVertex3f(1, -1, -1);
glNormal3f(0,0,1);
glColor3f(0, 0, 1); glVertex3f(-1, -1, 1);
glColor3f(0, 1, 1); glVertex3f(-1, 1, 1);
glColor3f(1, 1, 1); glVertex3f(1, 1, 1);
glColor3f(1, 0, 1); glVertex3f(1, -1, 1);
glEnd();
glTranslatef(-1,1,0);
glRotatef(a,0,0,1);
glTranslatef(1,-1,0);
glBegin(GL_QUADS);
glNormal3f(0,1,0);
glColor3f(0, 1, 0); glVertex3f(-1, 1, -1);
glColor3f(0, 1, 1); glVertex3f(-1, 1, 1);
glColor3f(1, 1, 1); glVertex3f(1, 1, 1);
glColor3f(1, 1, 0); glVertex3f(1, 1, -1);
glEnd();
glFlush();
if(a>90)
a=a-90;
a=a+1;
glutSwapBuffers();
glutPostRedisplay();
}
我期待光(0,0,-1)將在立方體亮從前,因爲我已經翻譯立方體-6。但是光線從後面傳來。
不要忘記,照明通常在渲染之前設置e場景。 – fintelia
我試了一下,但沒有任何影響,它仍然從背面照亮使用光照位置(0,0,-1) – pcoder