2012-09-14 62 views
1

所以我刚开始玩OpenGL,并决定做一个体素渲染的东西。我试图点亮它,但是当我将相机绕y轴旋转时发生奇怪的效果。例如,当我第一次产卵中,光看起来是这样的:OpenGL灯光相机改变亮度

http://i.stack.imgur.com/zQ49y.png

但是,当我有点绕旋转我得到这个:

http://i.stack.imgur.com/PWvVo.png

下面是做到这一点的代码东西:

glRotatef(xrot, 1.0f, 0.0f, 0.0); 
    glRotatef(yrot, 0.0f, 1.0f, 0.0); 

    glTranslatef(-3.5f-xcam, ycam, -3.5f-zcam); 

    glEnable (GL_DEPTH_TEST); //enable the depth testing 
    glEnable (GL_LIGHTING); //enable the lighting 
    glEnable (GL_LIGHT0); 

    GLfloat specular[] = {1.0f-xcam, ycam+1.0, 1.0f-zcam, 1.0}; 
    glLightfv(GL_LIGHT0, GL_SPECULAR, specular); 

    glEnable(GL_TEXTURE_2D); 

    glBindTexture(GL_TEXTURE_2D, grnd); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

    glBegin(GL_QUADS); 

    glTexCoord2i(0, 0); 
    glVertex3f(0, 0, 0); 

    glTexCoord2i(0, 1); 
    glVertex3f(0, 0, 7.0f); 

    glTexCoord2i(1, 1); 
    glVertex3f(7.0f, 0, 7.0f); 

    glTexCoord2i(1, 0); 
    glVertex3f(7.0f, 0, 0); 

    glEnd(); 

    glDisable(GL_TEXTURE_2D); 

    glLoadIdentity(); 

    drawVoxel(2.f, 0.f, 2.f, tex); 
    drawVoxel(1.f, 0.f, 1.f, tex); 
    drawVoxel(2.f, 0.f, 2.f, tex); 
    drawVoxel(3.f, 0.f, 3.f, tex); 

    drawVoxel(4.f, 0.f, 4.f, tree); 
    drawVoxel(4.f, 1.f, 4.f, tree); 
    drawVoxel(4.f, 2.f, 4.f, tree); 
    drawVoxel(4.f, 3.f, 4.f, tree); 

    test.Flip(); 

有没有人有任何想法是怎么回事?

+3

您未设置法线。 –

+0

设置法线如何工作? –

+0

我已经添加了答案。 –

回答

4

您还需要使用glNormal3f()。

. 
. 
. 

glBegin(GL_QUADS); 

glTexCoord2i(0, 0); 
glNormal3f(0,1,0); 
glVertex3f(0, 0, 0); 

glTexCoord2i(0, 1); 
glNormal3f(0,1,0); 
glVertex3f(0, 0, 7.0f); 

glTexCoord2i(1, 1); 
glNormal3f(0,1,0); 
glVertex3f(7.0f, 0, 7.0f); 

glTexCoord2i(1, 0); 
glNormal3f(0,1,0); 
glVertex3f(7.0f, 0, 0); 

glEnd(); 
+0

它似乎运作良好,它仍然是奇怪的东西,但这解决了我问。谢谢! –