0

これは明らかなはずの非常に単純な問題のように思えるため、申し訳ありませんが、私には無知のようです。

エンジンを作成し、ライト 0 をシーンの「太陽」として使用しています。理想的には、太陽はベクトルではなく固定光源になるので、位置ベクトルの 4 番目のインデックスは 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 = Ortho Projection およびシーンの回転/ズーム画面の真ん中。

何かご意見は?ここで私のコードの一部を少し混乱させたのでしょうか?

4

1 に答える 1

0

理想的には、太陽はベクトルではなく固定光源になるので、位置ベクトルの 4 番目のインデックスは 1.0f になるはずです。

基本的な人間のスケールを超えて起こっていることに関する限り、太陽は無限に遠くにあります. それはほぼ決定的な「ディレクショナル ライト」です。したがって、数百マイルまたは数千マイルにわたってレンダリングしない限り、太陽光の方向の違いはまったく関係ありません。

要するに、他の人と同じように、ディレクショナル ライトを使用する必要があります。

于 2012-02-21T07:49:45.177 に答える