0

我在 (0,0,0) 处有一个简单的立方体,在 (10,0,0) 处有一个光点。由于某种原因,我的立方体的左右两侧都被照亮了。所以立方体的相对两侧都亮了。我使用搅拌机生成法线,所以我知道那里是正确的,我还手动检查了它们并将它们倒置。但结果是一样的。

自然只有立方体的右侧应该点亮,对吗?

GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_LIGHT0);  
GL11.glLightModeli(GL11.GL_LIGHT_MODEL_LOCAL_VIEWER, GL11.GL_TRUE); 
        //
GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, floatBuffer(new float[] {0.2f, 0.2f, 0.2f, 1.0f}));  
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, floatBuffer(new float[] {0.8f, 0.8f, 0.8f, 1.0f}));   
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_SPECULAR, floatBuffer(new float[] {1.0f, 1.0f, 1.0f, 1.0f}));  
        //
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, floatBuffer(new float[] {10, 0, 0, 1}));         
    //
GL11.glEnable(GL11.GL_COLOR_MATERIAL);          
GL11.glColorMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE);

// 我对它做了更多的工作,现在我有了一个球体,我看它的每个方向,它都显示出完全相同的光。与光源相对的球体背面不应该像现实生活中那样黑暗吗?

// 我拍了照片,但网站说我需要 10 个声望点才能发布它们:(。

4

1 回答 1

0

我发现了问题。有一个很好的解释: Java/lwjgl 中的 OpenGL 光照问题
//
问题是我需要像这样在渲染循环中不断设置光照位置,,

public void render()
{
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, position));
}
于 2013-03-14T21:25:53.457 回答