描邊
發現物體輪廓的一個簡單方法就是使用N·V,其中N為法向量,V為頂點到眼睛(即攝像機)的向量。N·V度量了相對于當前視點表面的可見程度,當N·V是正值時一個點是可見的,而當N·V為負的時候這個點被隱藏。N·V接近0的點代表了從可見到隱藏的轉變——這些點就是在或者接近物體的輪廓上的點,通過對一個1D紋理采樣(簡單情況下,只有黑白兩個像素寬度,一個像素高度),可以得到類似于階梯函數的效果,shader代碼片段如下:float edge = max(dot(N , V) , 0);
edge = tex1D(edgeSampler , edge);
color = edge*color
可以通過1D紋理的寬度來控制描邊的粗細,如下圖所示:

通過if-else的形式給出過濾閥值也許更簡單,但效果卻沒有紋理采樣好。
posted on 2008-10-11 15:45 Heath 閱讀(2082) 評論(4) 編輯 收藏 引用 所屬分類: Graphics Programming