在我更詳細地定義我的問題之前,我想我應該從解釋我如何設置所有內容開始。AGAL:計算片段着色器中的屏幕空間位置
基本上我有一個簡單的平面網格,定義爲這樣的(X,Y,Z,U,V):
_vertices = Vector.<Number>([
-1, -1, 0, 0, 0,
1, -1, 0, 1, 0,
1, 1, 0, 1, 1,
-1, 1, 0, 0, 1
]);
_indices = Vector.<uint>([
0, 2, 1,
0, 3, 2
]);
沒什麼特別會在這裏。但是,我這樣做的方式就是這一切都落下了。 它通過使用兩個渲染過程呈現;第一個是簡單的片段着色器,它簡單地將一種顏色複製到輸出並呈現爲512x512紋理。 仍然,一切工作正常。它在我的問題所在的第二個渲染過程中。
第二次也是最後一次渲染通道呈現相同的幾何體,但是應該從第一次渲染渲染的紋理中提取碎片(像素)的顏色。 這就是我的問題出現的地方,我需要一種方法來正確計算當前像素在屏幕空間座標或UV座標中的位置,以便正確地從紋理中提取它們。
我已經做了一些研究如何計算這個位置,但不知何故我最終創造了一個萬花筒般的效果。該效果,但是,在旋轉時在X軸或Z軸的網格,但不是Y軸是唯一明顯的,如這裏所示
用於第二遍的片段程序,創建此所述一個效果,看起來像這樣
div ft0.x, v0.x, v0.w // Divide vertex positions (v0.xy) with clip-space position (v0.w)
div ft0.y, v0.y, v0.w // to obtain screen coordinates as -1,1
mul ft0.x, ft0.x, fc0.x // Multiply positions (ft0.xy) by 0.5 (fc0.x)
mul ft0.y, ft0.y, fc0.x
add ft0.x, ft0.x, fc0.x // Finally add 0.5 (fc0.x) to positions (ft0.xy)
add ft0.y, ft0.y, fc0.x
tex ft1, ft0.xy, fs0 <2d, nearest, repeat, nomip> // Simply copy the pixel at (ft0) from the render buffer (fs0)
mov oc, ft1";
最後一點,我對這一切都很陌生。所以我可能會錯過一些明顯的事情,因此我提前道歉。
如果你想看看它的所有不存在的榮耀代碼,Github回購可以找到here。