※ 引述《Q2N2222 (Q2N2222)》之銘言:
: 請問
: 假設以一個三角形來說
: vertex shader 是三角形的三個vertex座標做些變換後再輸出
: frament shader 是計算三角形中所有farment的color
: 是這樣的解讀有錯?
: 我看書上frament shader 會從vertex shader中
: 傳入經過模型矩陣變換過的vertex去計算光照
: 但這樣不就只有用那個頂點的座標去計算?
: 三角形上其他像素的座標不就沒用到?
: 那frament shader又是怎麼取得每個frament的座標的?
因為在推文我實在是回的亂七八糟
所以在這裡回一篇好了
網路上Google 大神回應很多,隨手貼一篇
http://goo.gl/sd2A9w
以下是我依記憶寫的,不是上面連結的中譯版本
psuedo code:
====
input:
三角形(三頂點),形成三個邊(E1, E2, E3)
每個頂點有 pos,normal,uv,color,...(or anything)
所以每個邊上的每個像素都可以內插出自有的 pos,normal,uv,color
====
algorithm:
找出此三角形所覆蓋到之像素區域 (bounding box)
對此區域中每個橫列之一整排像素 (scanline) 做以下工作:
- 判斷目前像素是否屬於三角型內部,如果是外部變略過
- 找出此 scanline 有交集的兩個邊
- 由這兩個邊找出起始和終點像素,內插出它們的pos,normal,...
- 對這個scanline 中交集的區斷每個像素去內插計算
- 得到每個像素自己的 pos,normal,color,uv...
(此階段便是由vertex shader將需要的資訊傳給fragment shader)
- 該有的資訊拿到了,做任何你想做的事(輸出顏色結果值)
====
其實好像還是寫的很亂
總之參考看看,有問題再問囉