私はエンジンを作成していて、シーンの「太陽」としてライト0を使用しています。太陽は指向性ライトです。
シーンのオルソ視点を設定してから、ライトを画面の「東」側(およびキャラクター)に設定します(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 = PopMatrixVideo.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 );
}