0

我很抱歉,因为这似乎是一个非常简单的问题,应该很明显,但似乎我一无所知。

我正在编写一个引擎并使用 Light 0 作为场景的“太阳”。我认为,理想情况下,太阳将是一个固定的光源,而不是一个向量,所以位置向量中的 w/fourth 索引应该是 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 = Ortho Projection and Scene Rotation/Zoom CenterCamera 会转换到 X/Y/Z 的反面,这样角色现在就以 X/Y/Z 为中心屏幕中间。

有什么想法吗?也许我在这里有点混淆了我的一些代码?

4

1 回答 1

0

我认为,理想情况下,太阳将是一个固定的光源,而不是一个向量,所以位置向量中的 w/fourth 索引应该是 1.0f。

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

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

于 2012-02-21T07:49:45.177 回答