我正在编写一个引擎,并使用Light 0作为场景的“太阳”。太阳是定向光。OpenGL定向照明+定位
我设置了场景的正交视点,然后将光线设置在屏幕的“东侧”(和字符)(x/y是平面地形的坐标,正z朝向相机并在地形上指示“高度” - 场景也在x轴上的等轴视图上旋转)。
光线似乎正在照亮0,0,0的“东”,但随着角色的移动,它不会移位(CenterCamera对提供的值的负值做一个glTranslate3f,以便它们可以映射指定世界坐标)。意思是,我进一步向西移动,它总是黑暗,没有光。
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在屏幕中间。
有什么想法?也许我已经在这里混淆了一些我的代码?
的照明代码如下:
public static void BeginLightingLayer(float pAmbientRed, float pAmbientGreen, float pAmbientBlue, float pDiffuseRed, float pDiffuseGreen, float pDiffuseBlue, float pX, float pY, float pZ)
{
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_NORMALIZE);
Gl.glEnable(Gl.GL_RESCALE_NORMAL);
Gl.glEnable(Gl.GL_LIGHT0);
Gl.glShadeModel(Gl.GL_SMOOTH);
float[] AmbientLight = new float[4] { pAmbientRed, pAmbientGreen, pAmbientBlue, 1.0f };
float[] DiffuseLight = new float[4] { pDiffuseRed, pDiffuseGreen, pDiffuseBlue, 1.0f };
float[] PositionLight = new float[4] { pX + 10.0f, pY, 0, 0.0f };
//Light position of Direction is 5 to the east of the player.
Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_AMBIENT, AmbientLight);
Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_DIFFUSE, DiffuseLight);
Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, PositionLight);
Gl.glEnable(Gl.GL_COLOR_MATERIAL);
Gl.glColorMaterial(Gl.GL_FRONT_AND_BACK, Gl.GL_AMBIENT_AND_DIFFUSE);
}
它可能有助于发布您的代码,显示您设置灯光的位置。 – kappamaki 2012-02-29 00:17:37
编辑原件以包含照明代码。 – Locke 2012-03-01 00:21:00
您是否计算并发送每个顶点的法线? – 2012-03-27 20:45:19