クラスの宿題として作成した既存の 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 で乗算すると、ワールド空間に戻りますか??