2

問題: 視差効果のある 2D ゲームを作成していますが、3D 空間を使用しているため、視差をシミュレートしていませんが、透視投影に任せています。問題は、レベルを設計する独自のゲーム エディターを持っていることです。このエディターでは、画像だけを使用し、各レイヤーに Z 値を設定します。ただし、レイヤーをゲーム エディターで設定したとおりにゲーム エンジンで表示する必要があります。つまり、透視投影で視差を実行しますが、スケールやオフセット/位置を変更する必要はありません。

明らかな解決策は、それらを拡大してオフセットすることですが、オフセットを計算する方法の問題はありますか? スケーリングで object->Scale(object.Z/view.Z) を試してみたところ、実際のサイズに戻ったようですが、位置がまだ間違っています。object->setPositionX(object->getPosition().x*(object.Z/view.Z)) を試してみましたが、すべてがずれているように見えることを除いて、整列しているようです。

アンプロジェクションを試み、ワールドマトリックスからスクリーンマトリックスに変換して、いくつかの比率などを見つけようとしました。

これをエレガントで数学的な方法で行うにはどうすればよいでしょうか?

4

1 に答える 1

1

透視投影は、遠近法でない場合、常にジオメトリをスケーリングします。投影を正投影に設定し、より遠くにあるジオメトリをスクロールすると、視差を簡単にシミュレートできます。
どんなゲームを作っているのかわかりませんが、例としてマリオクローンとしましょう。右矢印キーを押すと、マリオは X の量だけ右に移動し、カメラは同じ速度で移動します。ダイレクト レベル メッシュ (マリオと同じ「レイヤー」) の一部ではないすべてのジオメトリを X*object.z 量 (その値を調整する必要がある場合があります) スクロールさせて、近くにあるオブジェクトのスクロールを遅くし、オブジェクトを遅くすることができます。より速くスクロールします。

于 2013-01-28T12:32:44.310 に答える