3d - 3D平面上のオブジェクトの透視投影

原文 3d projection perspective plane

仮想人物とオブジェクトの間に平面があると想像してください。オブジェクトは、特定のxyzスケーリングと回転を備えたボックスです。飛行機はガラス窓のようなものです。人は飛行機を通して物体を見ています。カメラはシーン全体を別の角度から見ています。

あたかも窓の向こう側にある物体の輪郭をまるで窓に描いているかのように、人が見ているように平面に物体の輪郭を描きたい。

頂点が正しく平面上になるようにオブジェクトを変換するにはどうすればよいですか?

私は点を平面に正射影する方法を知っていますが、この場合は透視投影が必要だと思います。オブジェクトが遠くに移動した場合、その投影も、視聴者の視点に従ってサイズと位置を調整する必要があります。

私がとるべきステップを誰かだけが説明してくれるなら、私はコードを理解できると思います。
答え
人間の目を中心とした3D座標系を作成します。あるシステムから別のシステムにポイントを変換する関数を記述します。また、オブジェクトに関連付けられている別のシステムがある場合もあります。システムを作成することは、他のデフォルトの座標系でシステムの原点と軸の座標を書き込むことに他なりません。例えば:
System_human_eye = {Point3f Origin(10、0、3)、Xaxis(1、0、0)、Yaxis(0、1、0)、Zaxis(0、0、1)}
人間の目のシステムで、オブジェクトの頂点と平面法線の座標を見つけます。平面方程式はp.normal = Dです。Dは平面までの距離、pは平面点、法線は平面法線です。人間の目から頂点への光線はk * [x、y、z]です。 kが変化すると、光線に沿って移動します。あとは、光線が平面と交差するまで光線に沿って移動するだけです。

k * [x、y、z]。通常= D;
kを見つけ、点p = k * [x、y、z]を復元すると、光線と平面の交差が得られます。
人間の目のシステムからカメラシステムへのすべての交差を変換します。
openGLまたはレイトレーシングを使用して、これらの座標を画面に投影します。透視投影後も直線は直線のままなので、オブジェクトが線で構成されている場合はそのまま使用できます。したがって、必要なのは、ラインエンドポイントを投影し、それらを画面上のラインとして再接続することだけです。
関連記事

opengl - OpenGL 3Dテキストレンダリング

java - Android JavaからC++にopenglテクスチャハンドルを渡しますか?

opengl - OpenGL Zバイアス(ポリゴンオフセット)の制限

c++ - 3Dモデルの均一サンプリング

wpf - WPF 3Dでアンチエイリアスを使用する方法

silverlight - Silverlightでの等角投影法

math - ボックス対球の衝突

c++ - なぜこのコードはいくつかの角度でボックスの反対側の交差点を返すのですか?

c# - Direct3D 11 WorldViewProjectionマトリックス変換が機能しない

3d - メモリからのXNAハイトマップ