OpenGL照明和定位

时间:2012-02-21 05:09:56

标签: opengl lighting isometric

我道歉,因为这似乎是一个非常直截了当的问题,应该是显而易见的,但看起来我很无能。

我正在编写引擎并使用Light 0作为场景的“太阳”。我想,理想情况下,太阳将是一个固定的光源,而不是一个矢量,所以位置矢量中的w /第四个索引应该是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处居中。

有什么想法?也许我在这里稍微混淆了一些代码?

1 个答案:

答案 0 :(得分:0)

  

我认为,理想情况下,太阳将是固定光源,而不是矢量,因此位置矢量中的w /第四个索引应为1.0f。

就基本人类尺度上发生的任何事情而言,太阳是无限远的。它几乎是权威的“定向光”。因此,除非您渲染数百或数千英里,否则阳光方向的差异将完全无关紧要。

简而言之:就像其他人一样,你应该使用定向灯。