私は概念と数学を学ぶためにソフトウェアベースの3Dレンダラを作成しています。それは楽しいと私は床の一種として動作するグリッドの上に素晴らしい回転キューブを持っています。グリッド/フロアは線分を使用してレンダリングされます。シンプルなルックアット変換を使って仮想カメラを配置し、向きを変えました。表示面は、「目」から距離nにあるように、またはz = -n
にあるように任意に設定されます。表示面にクリップされた3D点の投影をどのように扱うべきですか?
1つのことを除いてすべてがうまくいきます(オブジェクトからワールドへの変換、カリング、プロジェクト、クリップ、レンダリング)。グリッドをレンダリングするとき、線分の端点は仮想カメラのビュープレーンにまたがることがあります。表示されている部分をレンダリングして、表示面にクリップします。クリッピングされた端点は、表示面に投影されます。投影は次のとおりです。
p'(x) = -n * p(x)/p(z)
p'(y) = -n * p(y)/p(z)
潜在的に見えるポイントはすべてp(z) ≤ -n
です。表示面にクリップされた点はp(z) = -n
です。したがって、私は効果があります:
p'(x) = p(x)
p'(y) = p(y)
このような点については、正射投影。
ここでの値は、ビュープレーンのウィンドウの外側にあるため、ビューポート変換によってこれらのポイントがOSウィンドウの境界から外れることがあります。その効果は、私が定期的に周りを飛んでいる迷路を参照していることです。それは恐ろしいです。
OpenGLを使っているだけで、OpenGLを使っているというだけのことをやっているだけでは不十分です(私はOpenGLを使っています)。
ありがとうございました。
次は、異常を示すスクリーンショットです。グリッドの右端のコーナーは見えなくなっています。グリッドの左下隅に向かって来る線分は、カメラの後ろにあり、クリップされます。終点は、(間違った)正射投影を受け、左のフィールドで途中で終わります。
私は(まだ)錐台カリングを行っていません。おそらく私はすべきですか?
私はあなたのロジックに従っていますが、私には、これらのポイントのためにまっすぐな正射投影を持つべきではないようです! –
この質問では、いくつかの問題が混在しています。1)ウィンドウの外にあり、視点の背後にあるというトピックを混在させます。 2)正射影の投影を言いますが、これは透視投影の問題です。 – ideasman42