2012-02-21 90 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