我很抱歉,因为这看起来像是一个很明显的直截了当的问题,但似乎我很无能。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为中心。
有什么想法?也许我已经在这里混淆了一些我的代码?
通常太阳被定义为定向光。 – Luca 2012-02-21 06:24:57