我們經常要實現繪製模型輪廓線的效果,這一節就介紹使用幾何着色器來實現這個效果。
這一節的介紹是參考Philip Rideout 博客,下一節我會介紹這個博客複雜一點的效果實現步驟。
幾何着色器最重要的一個特性就是我們可以獲得當前圖元的相鄰頂點信息,以下爲例:
其中的實線代表當前三角形本身的頂點,其中的虛線代表相鄰的頂點信息。因此我們根據相鄰點信息來判斷當前線段是否處於輪廓線。
下面介紹根據三個點來求得法線,主要思想就是根據這三個頂點,計算兩個向量,接着根據這兩個向量法向量:
而其中的nz就可以用來判斷是否在正面的依據。
主要步驟:
1. 判斷當前面是否是正面(背面剔除不做處理)。如果是,轉2.
2. 根據相鄰面判斷是否處於背面,如果是,轉3;
3. 當前線段是輪廓,繪製輪廓線(可以通過控制直線寬度);
4. 繪製當前處理的三角形。
5. 在片段着色器中根據是否是輪廓線做判斷,如果是輪廓線,則用直線顏色代替,否則使用卡通渲染來決定當前片段的顏色。
頂點着色器處理:
計算出在相機空間中的頂點和法向量。片段代碼:
幾何着色器處理:
1. 判斷法線是否處於正面:
2. 計算輪廓線
3. 設置當前圖元頂點信息
渲染效果圖: