0

私はこれを理解できないようです。つまり、カメラは(0,0,5.0f)に配置された(0,0,0)で世界を調べています。画面の解像度が800x600だとします。さて、世界の中心は(0,0,0)なので、カメラに見える極値(たとえば、x軸の右側)は何ですか?

カメラが(0,0,50.0f)に配置された場合の値はどうなりますか?基本的に、これをどのように理解しますか?

+-------------------+
|         |         |
|         |         |
|         |         |
+---------+---------¤ <-- what's the x-value of this point?
|         |         |
|         |         |
|         |         |
+-------------------+
4

1 に答える 1

1

私が質問を正しく理解していれば、画面の中央右にある点の世界空間の位置を知りたいですか?

実際、XNA では非常に簡単に実行できます (MS に感謝します!)。ビューポート クラスを使用して、スクリーン スペースの場所をワールド スペースに「投影解除」できます。

基本的に、ゲームで描画されるすべてのピクセルは、いくつかの変換を経て、2D ディスプレイに描画できる 2D 画像に変換されます。これらの変換を逆方向に実行することもできます。XNA には、このためのメソッドがあります。

Vector3 screenLocation = new Vector3(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height / 2, 0);
Vector3 worldLocation = GraphicsDevice.Viewport.Unproject(screenLocation, camera.ProjectionMatrix, camera.ViewMatrix, camera.WorldMatrix);

編集:

カメラ ビュー内のオブジェクトを描画できるかどうかを確認しようとしている場合は、バウンディング フラスタムを使用してテストできます。

BoundingFrustum frustum = new BoundingFrustum(camera.WorldViewProjectionMatrix);

frustum には Intersects という名前のメソッドが含まれており、バウンディング ボックスなどが錐台内にあるかどうかをテストするためのオーバーライドがかなりあります。

于 2012-06-12T14:23:55.797 に答える