2011-07-14 34 views
4

我正在使用以下代碼繪製一個形狀;(徑向)漸變填充使用OpenGL ES的

GLfloat vertex = // vertex points 

glLineWidth(2); 

glEnableClientState(GL_VERTEX_ARRAY); 
glColor4f(1.0, 0.0, 0.0, 1.0); 
glVertexPointer(2, GL_FLOAT, 0, vertex); 
glDrawArrays(GL_LINE_STRIP, 0, vertex_size); 
glDisableClientState(GL_VERTEX_ARRAY); 

我畫的形狀自己閉合,是否可以用(徑向)漸變填充此形狀?如果是這樣,怎麼去做呢?

回答

12

如果您在ES 1.x中,則無法獲得計算出的每像素徑向漸變,因爲顏色是跨線性插值到面上的。因此,您可以上傳徑向漸變紋理,也可以構建合適的幾何體以提供接近徑向的漸變。

在ES 2.x中沒有這樣的限制,因爲您正在定義自己爲每個像素髮生的情況。一個非常幼稚的徑向漸變片段着色器可能會被(編碼即興,不徹底的語法檢查):

varying mediump vec3 myPosition; 
uniform mediump vec3 referencePosition; 
uniform lowp vec4 centreColour, outerColour; 

[...] 

mediump float distanceFromReferencePoint = 
         clamp(distance(myPosition, referencePosition), 0.0, 1.0); 

gl_FragColor = mix(centreColour, outerColour, distanceFromReferencePoint); 
+2

這必須是'距離(myPosition,referencePosition)',雖然。 –

+0

@ClassStacker你100%正確 - 我會糾正我的答案。 – Tommy

+0

@Tommy我還沒有使用片段着色器。你有沒有可能把這個擴展成更完整的例子? – drewish