0

クラスの宿題として作成した既存の 3D レンダラーにシャドウ機能を拡張しています。2 パス z バッファ アルゴリズムを実装しようとしています。すでに最初のパスを実行し、深度マップを作成しました。ただし、問題は、画面空間で線をラスタライズするため、深度マップの z 値とフラグメント座標の z 値の比較が画像空間で行われるため、座標を画像空間に戻す必要があることです。

空間変換行列を次の形式で格納するスタック実装を使用します。

[Xsp] * [Xpi] * [Xiw ] * (x,y,z) ワールド空間の座標 = スクリーン空間の x,y,z Xsp - パースペクティブからスクリーン Xpi - イメージからパースペクティブ Xiw - 世界からイメージ

ここで、スタックの一番下には Xsp が含まれ、下から 2 番目には Xsp に Xpi を掛けたものが含まれ、下から 3 番目には Xsp * Xpi に Xiw を掛けた結果が含まれます .....

今、私は画像空間でx、y、z、つまり(ワールド空間でXiw * x、y、z)だけが欲しいので、ワールド空間でx、y、zを取得することは私にとってうまくいきます...それは可能ですか各行列の逆数を掛けてから、結果を画面空間の x、y、z で掛けると達成できますか???

つまり、やりたい

[Xsp]inverse * [Xpi]inverse * [Xiw]inverse 、これを画面空間の x、y、z で乗算すると、ワールド空間に戻りますか??

4

1 に答える 1

1

私に当てさせてください。USC CS580?

とにかく助けます。

最初に頂点を取得した方法:

Xsp * Xpi * Xiw * Xwm * v = vf //Concat * model-space vertex = raster-space vertex

vf' = (vf.x / vf.w, vf.y / vf.w, vf.z / vf.w); //Perspective

vf' で戻す方法:

Xwm * vf = Xiw^-1 * Xpi^-1 * Xsp^-1 * vf' //Inverted partial concat * raster-space vertex = world-space vertex

v = (vf.x / vf.w,  vf.y / vf.w, vf.z / vf.w); //Perspective again

法線は画像空間にのみ移動するため、反転した Xiw だけでワールド空間に戻る必要があることを除いて、法線は同じ考え方です。関係する視点もありません。

于 2012-04-22T19:46:58.213 に答える