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

問題が見つかりました。良い説明があります: here Java/lwjgl での OpenGL ライティングの問題
//問題
は、このようにレンダー ループで常にライトの位置を設定する必要があることでした。

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