我在(0,0,0)处有一个简单的立方体,在(10,0,0)处有一个光点。出于某种原因,我的立方体的右侧和左侧都被照亮了。所以立方体的两侧都亮了起来。 我使用搅拌机生成法线,所以我知道正确,我也手动检查它们并倒置它们。但结果是一样的。
Naturaly只有立方体的右侧应该点亮吗?
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个声望点才能发布:(。
答案 0 :(得分:0)
我发现了问题。有一个很好的解释:这里Problems with OpenGL lighting in Java/lwjgl
//
问题是我需要不断设置渲染循环中的灯光位置,如下所示
public void render()
{
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, position));
}