7

2D アイソメトリック エンジンで世界をレンダリングしながら、舞台裏で 3D シミュレーションを行っています。私は以前に等角投影エンジンをやったことがなく、私の行列計算は一般的にさびているので問題があります。

私は射影行列を持っています。最も単純な形式は次のとおりです。

 0.7       0.35     0
 0        -0.87     0
-0.71      0.35     1

私のエンジンの座標系は左上が 0,0 で、+X が右/東、+Z が南であるため、いくつかの記号が反転しています。

さて、その逆は次のとおりです。

1.4080  0.5670   0.0000
0.0000 -1.1490   0.0000
1.0000  0.8050   1.0000

現在、これらのマトリックスはほとんど機能しています。

例えば

WC: 500,0,500 =画面: -1.44 , 350, 500 (X と Y は正しい)

WC: 0,0,500 =画面: -355 , 175, 500 (X と Y は再び正しい)

しかし、逆の方向に進む必要がある場合、便利な Z 値はもうありません。

Screen: -1.44, 350, 0 = WC: -2, -402.97, 0 (つまり、ゴミです。)

さらに、その Z 値がなくなるとすぐに、画面座標から世界座標を取得できなくなります。

ここでの回避策は何ですか?

編集

unproject のポイントは、マウス ピッキング用のレイを取得することです。

ここで私を台無しにしていたのは、私がしていたことに対する私の誤解だけのようです。

4

3 に答える 3

8

お気づきのように、3D 空間への変換には、意味を成すために何らかの Z 座標が必要です。

逆変換を 2 回行うことをお勧めします。画面の近く (観測者に最も近い) の Z 座標で 1 回、3D シーンの背面で Z 座標で 1 回。これらの 2 つの 3D ポイントは、その 2D ポイントの「後ろ」のすべての位置を占める 3D ラインを提供します。

于 2009-05-26T20:09:05.057 に答える
2

画面上のすべてのピクセルは、見る人の目から画面の背後にある架空の3Dワールドへの線を表しています。3D座標を取得するには、この線をその世界に潜んでいる可能性のあるオブジェクトと交差させる必要があります。

于 2009-05-26T20:32:24.820 に答える
2

できません。あなたは情報を失うスクリーンに投影しています。

考えてみると、いくつかの 3D 座標が画面上の同じポイントに投影され、その画面座標を知っているだけでは元の座標を取得するのに十分ではありません。

[編集] 画面座標を見て、それらにすべての z 値 0 を与えます。これは、射影行列の最後の列がすべてゼロであることを意味し、その行列を非可逆にする必要があります。

于 2009-05-26T20:05:58.883 に答える