固定(在世界坐标中)LWJGL中的照明位置?

时间:2013-02-14 22:35:02

标签: java lwjgl lighting

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

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); 

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

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

1 个答案:

答案 0 :(得分: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

你的光还必须移动。 :)