作者:
Q2N2222 (Q2N2222)
2016-07-12 00:59:31請問
假設以一個三角形來說
vertex shader 是三角形的三個vertex座標做些變換後再輸出
frament shader 是計算三角形中所有farment的color
是這樣的解讀有錯?
我看書上frament shader 會從vertex shader中
傳入經過模型矩陣變換過的vertex去計算光照
但這樣不就只有用那個頂點的座標去計算?
三角形上其他像素的座標不就沒用到?
那frament shader又是怎麼取得每個frament的座標的?
fragment你在 fragment shader 裡面會拿到已經內插好的座標早期的 GLSL 是用 varying 宣告要內插的變數
作者:
Q2N2222 (Q2N2222)
2016-07-12 23:50:00了解了 感恩
frag取得的不是頂點座標,而是插值uv座標頂點是給triangle setup單位處理。frag得到資料已是每個pixel所屬的uv,法線
作者:
Q2N2222 (Q2N2222)
2016-07-15 00:07:00uv是指二維? 可是傳入的是三維 vec3
而且還會幫你弄 perspective division
貼圖UV通常只需要2維。除非反射貼圖。vs輸出資料不等於frag輸入資料。3維頂點不是給frag,是給TriangleSetupSetup完畢傳給Frag已非3D頂點座標而是2D螢幕像素,及其著色所需插值資訊
作者:
Q2N2222 (Q2N2222)
2016-07-18 20:20:00那frag中要怎麼用2d座標就算光照?
作者:
riveranb (River)
2016-07-18 21:10:001.all vertices: calculate pos,n,color,uv,...(lit)2a. all fragments on 3 edges to calculate info.2b.rasterize: fragments on scanlines inside 3 edges.3c.each fragment get interpolated pos,n,color,uv,...3.in fragment shader, get your final result(color).
不用 2D 座標算 shading 啊,你複製一份 pos 送內插就好
float2 uv : TEXCOORD0; 用它與tex2d()抓貼圖顏色。float3 color: COLOR傳送算完Diffuse光照的顏色頂點光照就兩個乘起來就搞定。而pixel光照也不需要頂點3D位置。是傳法向量與光向量它只要知道兩個向量就能算夾角,用角度判斷光的強度Frag不需要知道自己處理得pixel位置在哪裡。Vert(頂點)->TriangleSetup(頂點轉pixel,插值)->Frag(算顏色)
我竟然沒發現 shading 不需要 pos 這個盲點 XDD
frag連自己的螢幕2D座標都不必知道啊XD只要知道怎摸算顏色就好。