2012-02-21 71 views
0

我很抱歉,因爲這看起來像是一個很明顯的直截了當的問題,但似乎我很無能。OpenGL照明和定位

我正在寫一個引擎,並使用Light 0作爲場景的「太陽」。我想,理想情況下,太陽將是一個固定的光源,而不是一個矢量,所以位置矢量中的第四個索引應該是1.0f。

我設置了場景的正交視點,然後將光線設置爲字符的位置(x/y是平面地形的座標,正z朝向相機並指示地形上的「高度」 - 場景也在x軸上的等軸視圖上旋轉)。

角色始終居中在屏幕中 - 但我注意到,由於某種原因,燈光似乎在角色和世界座標0,0,0之間的位置發光。角色從世界座標0,0,0獲得的越遠,光線越大/越寬。如果角色爲0,0,0,則光線非常小。如果角色移動到像0,200,0這樣的東西,燈光就會很大。

我只是試圖弄溼我的腳,並有一個跟隨角色的「光」(然後調整位置等,以後再創造一個太陽)。

 Graphics.BeginRenderingLayer(); 
     { 
      Video.MapRenderingMode(); 

      Graphics.BeginLightingLayer(Graphics.AmbientR, Graphics.AmbientG, Graphics.AmbientB, Graphics.DiffuseR, Graphics.DiffuseG, Graphics.DiffuseB, pCenter.X, pCenter.Y, pCenter.Z); 
      { 
       Graphics.BeginRenderingLayer(); 
       { 
        Graphics.CenterCamera(pCenter.X, pCenter.Y, pCenter.Z); 
        RenderMap(pWorld, pCenter, pCoordinate); 
       } 
       Graphics.EndRenderingLayer(); 

       Graphics.BeginRenderingLayer(); 
       { 
        Graphics.DrawMan(pCenter); 
       } 
       Graphics.EndRenderingLayer(); 
      } 
      Graphics.EndLightingLayer(); 
     } 
     Graphics.EndRenderingLayer(); 

Graphics.BeginRenderingLayer = PushMatrix,EndRenderingLayer = PopMatrix Video.MapRenderingMode =正交投影與場景旋轉/放大 CenterCamera確實一個轉換爲X/Y/Z的相反,使得該字符是現在以屏幕中間的X/Y/Z爲中心。

有什麼想法?也許我已經在這裏混淆了一些我的代碼?

+0

通常太陽被定義爲定向光。 – Luca 2012-02-21 06:24:57

回答

0

我想,理想情況下,太陽將是一個固定的光源,而不是一個矢量,所以位置矢量中的第四個索引應該是1.0f。

就基本人類尺度上發生的事情而言,太陽無限遙遠。這幾乎是最終的「定向光」。因此,除非你在數百或數千英里的範圍內進行渲染,否則陽光方向的差異將完全不相關。

簡而言之:您應該像其他人一樣使用定向燈。

+0

這就是說,我仍然對光的定位有問題(對不起,打回車,並預計寫另一條線,如果你已經回覆,非常抱歉)。 如果我做定向光,光線仍然不會從0,0,0座標移動。即如果我將光線設置在左側(朝西),光線將在0,0,0左右,左側將爲「亮」,而0,0,0的右側將開始變暗。有沒有一種方法可以讓位置指示燈跟隨我的翻譯?我認爲光線在渲染場景之前需要「調用」,對吧? – Locke 2012-02-21 15:01:55