2011-07-14 35 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