2013-07-24 40 views
0

我是新來的3D編程。最近我發現UV映射令我感到困惑。stage3d uv mapping如何工作?

使用

tex ft0, v1, fs0 <2d,repeat,nomip> 
mov oc, ft0 

我給V1紫外線協調和FS0紋理位圖,它工作,因爲它是。紋理包裹了3D對象。

但我只複製ft0到一次座標爲v1的座標,系統知道如何填充其他區域?

我沒有提供頂點座標,片段程序是否調用每個像素或每個頂點渲染?

回答

0

嗯,首先你要「V1」 :(變寄存器1)從頂點着色器:通過從(頂點屬性)「VAX」,通常是一個設置它:mov vX, vaX或其他操作。
什麼是變化的寄存器(即'v1')是爲組成三角形的三個頂點插值uv值(即'vaX')。
注意:變化寄存器是唯一可以在頂點和片段着色器之間進行通信的方法。

對於每個像素,該'TEX'功能將樣品從紋理採樣 'FS0'與托架之間的規則的區域 'V1'rasterise)(即< 2D,重複nomip>)。
想到的第一行作爲ft0 = fs0.getPixel(v1)的,與來自比方說VA1(1)[X,Y,Z,W]VA1(2)上運行的V1 [X,Y,Z,W](Z可以是用於照明和其他效果),然後將這一個像素/片段輸出到'oc'(輸出顏色)。

片段着色器也稱爲像素着色器 - >爲每個像素調用一次。
另一方面,每個頂點都會調用一次像素着色器。
有一種稱爲幾何着色器的第三種着色器,但在Stage3D/AGAL中不可用。

+0

非常感謝你的解釋,幫助我很多,糾正我,如果我錯了。 – davyzhang

+0

其中的主要技巧是*​​變化寄存器*不是一個固定值,它有一個算法來插值三個頂點之間的值,所以在由頂點着色器設置之後,v1按每個像素改變,從紋理獲得不同的RGB數據並輸出它。 – davyzhang

+0

不客氣!基本上就是這樣,你的意思是'rgba'數據。 – chadiik

1

只是澄清 - 你不需要爲每個像素調整着色器。假設您給頂點和片段着色器提供了正確的紋理和常量,則只需上傳program3D(使用頂點着色器和片段着色器)即可。當您調用context3D.drawTriangles(...),然後調用context3D.present時,GPU將整理渲染。

+0

感謝您的澄清,這有助於! – davyzhang