2

我在“世界”中有一些立方体模型和一个灯笼模型(带有法线)和一个放置在特定坐标中的光源。当我尝试在模型中移动时出现问题,光源的位置每帧都会更改为视口位置。这是我的代码的初始化部分,其中包含照明初始化:

GL11.glEnable(GL11.GL_TEXTURE_2D);
            GL11.glShadeModel(GL11.GL_SMOOTH);
            GL11.glClearDepth(1.0f);
            GL11.glClearColor(0.0f, 0.75f, 1.0f, 1);
            GL11.glEnable(GL11.GL_CULL_FACE);
            GL11.glEnable(GL11.GL_BLEND);  
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            GL11.glDepthFunc(GL11.GL_LESS);
            GL11.glMatrixMode(GL11.GL_PROJECTION);
            GL11.glLoadIdentity();

            GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
            ByteBuffer temp = ByteBuffer.allocateDirect(16);
            temp.order(ByteOrder.nativeOrder());
            byf = temp;
            GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(lightAmbient).flip());              // Setup The Ambient Light
            GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(lightDiffuse).flip());              // Setup The Diffuse Light
            GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(lightPosition).flip());         // Position The Light
            GL11.glEnable(GL11.GL_LIGHT1);
            GL11.glEnable(GL11.GL_LIGHTING);

            GL11.glMatrixMode(GL11.GL_MODELVIEW);
            GL11.glLoadIdentity();


            GL11.glFogi(GL11.GL_FOG_MODE, fogMode[fogfilter]);                 
            temp.asFloatBuffer().put(fogColor).flip();
            GL11.glFog(GL11.GL_FOG_COLOR, temp.asFloatBuffer());             
            GL11.glFogf(GL11.GL_FOG_DENSITY, 0.35f);                           
            GL11.glHint(GL11.GL_FOG_HINT, GL11.GL_DONT_CARE);                  
            GL11.glFogf(GL11.GL_FOG_START, 1.0f);                               
            GL11.glFogf(GL11.GL_FOG_END, 5.0f);                                
            GL11.glEnable(GL11.GL_FOG); 

我见过一些类似的问题,但他们的解决方案根本没有帮助我。我知道问题在于设置矩阵的不规则顺序,但我不知道哪个(矩阵)以及我应该在哪里更改。我试图在光照初始化之前设置 Modelview 矩阵,但它对我不起作用。

顺便说一句,我不想​​在每一帧都设置正确的灯光位置,它对我有用,但它会减慢渲染速度。

4

1 回答 1

0

您可能正在使用与此或 glulookat() 类似的代码。

GL11.glTranslatef(Camera.x, Camera.y, Camera.z);
GL11.glRotatef(Camera.roatationz, 0.0f, 0.0f, 1.0f);
GL11.glRotatef(Camera.roatationx, 1.0f, 0.0f, 0.0f);
GL11.glRotatef(Camera.roatationy, 0.0f, 1.0f, 0.0f);

//Render stuff here

你的光也必须移动。:)

于 2013-08-02T01:26:42.037 回答