2013-02-14 35 views
2

我有一些立方體模型和一個燈籠模型在「世界」(與法線)和一個光源放置在特定的座標。當我嘗試在模型中移動時,問題就出現了,光源的位置會改變每一幀到視口的位置。這裏是我的代碼初始化部分,其中包含照明初始化:固定(在世界座標中)LWJGL的照明位置?

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

我已經看到了一些類似的問題,但他們的解決方案並沒有幫助我。我知道問題在於設置Matrixes的順序不規則,但我不知道哪一個(Matrix)和我應該改變的地方。 我試圖把設置模型視圖矩陣之前的照明初始化,但它不適合我。順便說一句,我不想​​在每一幀都設置正確的光線位置,它適用於我,但它可以減緩渲染速度。

回答

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 

你的光也必須移動。 :)

+0

這個答案是有點片段的,請考慮加入一點更多的上下文。 – 2013-08-02 01:45:38