2012-12-15 52 views
0

如何在我的terain上獲得硬邊緣。我在GLSL中有一個簡單的環境和漫反射着色器。我認爲片段着色器是插值頂點法線並導致平滑着色。你們是否需要我的代碼,或者有可能我可以啓用一些設置?如何獲得硬邊緣 - OpenGL

當前terain無硬邊: http://twirlbound.com/uploads/terain.png

+1

如果你可以分享一些你可以使用的繪製例程代碼。可以更輕鬆地幫助你。 – ceorron

+0

檢查了這一點。 http://www.opengl.org/wiki/Type_Qualifier_(GLSL)#Interpolation_qualifiers – dupersuper

回答

2

在你的頂點着色器後光滑,做這樣的事情:

flat out vec3 v_normal; 

在你的片段着色器,這樣的事情:

flat in vec3 v_normal; 

flat告訴GL爲三角形光柵化的所有片段具有相同的值。使用哪個頂點的法線取決於當前的「激發頂點」,通過調用glProvokingVertex來設置。

+0

放在着色器中爲我工作:)謝謝! – user1907037

0

要獲得硬邊像你所要求的,你需要每個三角形法線是垂直於三角形的方向來指定。爲此,您需要將它們作爲三角形發送,如同四邊形或類似的。

您還需要在繪製例程之前設置以下內容以獲得平坦着色。

glEnable(GL_FLAT); 
glShadeModel(GL_FLAT); 

您可以設置陰影回用

glEnable(GL_SMOOTH); 
glShadeModel(GL_SMOOTH); 
+0

這傢伙沒有使用固定功能流水線,所以這是行不通的。 – dupersuper

相關問題