2012-04-17 11 views
0

私はクラスの宿題として作成した既存の3Dレンダラにシャドー機能を拡張しています。私は2パスzバッファアルゴリズムを実装しようとしています。私はすでに最初のパスをして深さマップを作成しました。しかし、問題は、私はスクリーンスペースで私のラインをラスタライズするので、深さマップのz値とフラグメント座標のz値の比較が画像空間で行われるので、座標をイメージスペースに戻さなければならないということです。ワールド空間逆投影の視点

Iは、次の形式で空間変換行列を格納するスタック実装を使用:

は[XSP] * [XPI] * [Xiw] *(x、y、z)は、ワールドスペース= xに座標Y、XSP画面空間 におけるZ - 斜視画面 にXPI - 画像斜視 にXiw - 世界ここ画像

に、スタックの底部は第二、XSPはXPIを乗じ含ま底に、XSPを含有します、三番目から一番下まではXsp * XpiにXiwを掛けた結果を含みます.....

今、私は画像空間のx、y、zだけを()(ワールドスペースのX、Y、Z)したいので、ワールド空間でx、y、zを得ることは私のために働くでしょう... Isそれは、各行列の逆行列を掛けて、その結果にスクリーン空間のx、y、zを掛け合わせると実現できますか?私が意味する

は、私は は、それが戻って世界に私を取得します

[XSP]逆* [XPI]逆* [Xiw]逆変換を行うには、X、Y、画面スペースのZでこれを乗算したいですスペース ??

+0

2つの行列の積を反転するときは、 - ([A] [B])inverse = [B] inverse * [A] inverseを反転する必要があることに注意してください。 –

答えて

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と ':あなたが唯一の反転Xiwを必要とする以外

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 

通常は同じ考えです法線は画像空間にしかないので、世界の空間に戻る。また、視点は関与していません。

+0

ありがとうたくさんのTim ..それは働いた! – jerry

+0

とはい.. btw it's USC 580 – jerry

関連する問題