OpenGL照明和定位



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

我正在编写一个引擎,并使用Light 0作为场景的"太阳"。我想,理想情况下,太阳将是一个固定的光源,而不是一个矢量,所以位置矢量中的w/第四个索引应该是1.0f

我设置了场景的"正交"视点,然后将灯光设置在角色的位置(x/y是平面地形的坐标,正z面向摄影机,指示地形上的"高度"——场景也会旋转以获得x轴上的等轴测视图)。

角色总是在屏幕的中心——但我注意到,由于某种原因,光线似乎照射在角色和世界坐标0,0,0之间的位置。角色离世界坐标0,0,0越远,灯光就越大/越宽。如果角色位于0,0,0,则灯光非常小。如果角色移动到类似0200,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=PopMatrixVideo.MapRenderingMode=正交投影和场景旋转/缩放CenterCamera将平移到X/Y/Z的相反方向,以便角色现在以屏幕中间的X/Y/Z为中心。

有什么想法吗?也许我把这里的一些代码弄糊涂了?

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

就人类基本尺度上发生的任何事情而言,太阳都是无限遥远的。这几乎是决定性的"定向光"。因此,除非你在数百或数千英里的范围内进行渲染,否则阳光方向的差异将完全无关。

简而言之:你应该像其他人一样使用平行光。

相关内容

  • 没有找到相关文章

最新更新