2011-07-09 25 views
2

仮想人とオブジェクトの間に平面があるとします。オブジェクトは、特定のxyzスケーリングと回転を持つボックスです。飛行機はガラス窓のようです。人は飛行機を通して物体を見ている。カメラは、シーン全体をさまざまな角度から見ています。3Dでの平面上のオブジェクトの透視投影

私は、あたかも彼が反対側のオブジェクトの輪郭をウィンドウ上に描いているかのように、オブジェクトの輪郭を平面に描画したいと思います。

どのように頂点が平面上に正しく終わるようにオブジェクトを変形できますか?

ポイントを平面に投影する方法はわかっていますが、この場合は透視投影が必要です。オブジェクトが遠くに移動するとき、その投影も、視聴者の視点に応じてサイズおよび位置を調整する必要があります。

誰かだけが私が取る必要がある手順を説明するなら、私はコードを理解することができると思います。

答えて

1
  1. 人の目を中心とした3次元座標系を作成します。 1つのシステムから別のシステムへポイントを変換する書き込み機能。オブジェクトに別のシステムを関連付けることもできます。システムを作成することは、他のデフォルトの座標系でシステムの原点と軸の座標を書くことに他ならないことに注意してください。例えば: System_human_eye = {Point3f原点(10、0、3)、X軸(1、0、0)、Y軸(0、1、0)、Z軸(0、0、1)}

  2. で人間の目のシステムは、オブジェクトの頂点と平面の座標の座標を見つける。平面方程式はp.normal = Dであり、Dは平面までの距離であり、pは平面点であり、法線は平面法線である。人間の目から頂点までの光線はk * [x、y、z]である。 kが光線に沿って移動するように変化するとき。ここで行う必要があるのは、平面に交差するまで光線に沿って移動することだけです。すなわち、

    k * [x、y、z]です。法線= D; find k、復元ポイントp = k * [x、y、z]これは、平面との光線の交差を与えます。

  3. 人間の目のシステムからカメラシステムへのすべての交点を変換します。

  4. OpenGLまたはレイトレーシングを使用して、これらの座標を画面上に投影します。透視投影の後、直線は直線のままなので、オブジェクトが直線で構成されている場合は、それらを使用することができます。ですから、ラインエンドポイントを投影してスクリーン上のラインとしてそれらを再接続するだけです。
+0

これはしばらくお待ちしており、この質問がまだ開いているかどうかはわかりません。あなたが書いていることは、基本的に私がその時にどのように理解したかです。詳細な答えをありがとう。 –

0

通常、perspective projectionを実行します。

しかし、それには理論と数学の塊が関わっています。もっと単純なことをしたいのであれば、オブジェクト内のすべての頂点に対して、目を頂点に結びつけている平面を計算して平面と交差させるだけです。

関連する問題