我道歉,因为这似乎是一个非常直截了当的问题,应该是显而易见的,但看起来我很无能。
我正在编写引擎并使用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处居中。
有什么想法?也许我在这里稍微混淆了一些代码?
答案 0 :(得分:0)
我认为,理想情况下,太阳将是固定光源,而不是矢量,因此位置矢量中的w /第四个索引应为1.0f。
就基本人类尺度上发生的任何事情而言,太阳是无限远的。它几乎是权威的“定向光”。因此,除非您渲染数百或数千英里,否则阳光方向的差异将完全无关紧要。
简而言之:就像其他人一样,你应该使用定向灯。