2013-08-21 20 views
0

我正在使用GLSL渲染基本立方體(由GL_QUADS表面製成)。我想將頂點上的gl_Vertex內容傳遞給片段着色器。如果我爲此使用gl_FrontColor(頂點着色器)和gl_Color(片段着色器),但使用普通varying(請參閱下面的代碼&),則此功能無效。由於某種原因,這種變化似乎並未在表面上進行插值。任何想法可能會導致這在OpenGL中?OpenGL/GLSL在GL_QUAD之間變化無法插值

glShadeModel設置爲GL_SMOOTH - 我想不出任何可能導致此效果的東西。

頂點着色器:

#version 120 

varying vec4 frontSideValue; 

void main() { 
    frontSideValue = gl_Vertex; 
    gl_Position = transformPos; 
} 

片段着色器:

#version 120 

varying vec4 frontSideValue; 

void main() { 
    gl_FragColor = frontSideValue; 
} 

Left: Unwanted result, Right: Proper interpolation

+1

立方體的大小是多少?可能它大於1?使用0 ...最多爲1. – fen

回答

2

結果看起來就像你是不是在使用範圍內的值[0,1 ]爲顏色矢量。您基本上使用未轉換的頂點位置,這可能會超出此範圍。你的立方體似乎以原點爲中心,所以你可以看到數值實際在範圍[0,1]內的小過渡,就像那個不鋒利的帶子。

隨着builin gl_FrontColor,該值似乎在插值之前被鉗位。

+1

海報可以使用'frontSideValue = clamp(gl_Vertex,0.0,1.0)'檢查此診斷;'但這聽起來正確。 – Tommy

+0

你一定是對的 - 我以爲我是在繪製一個單位立方體,但實際上它是從原點向每個方向延伸10個單位。謝謝! – Chris