(径向)使用OpenGL ES进行渐变填充

Thy*_*hys 4 opengl-es radial-gradients fill

我目前正在使用以下代码绘制一个形状;

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);
Run Code Online (Sandbox Code Playgroud)

我画的形状自闭,是否可以用(径向)渐变填充这个形状?如果是这样,怎么办呢?

Tom*_*mmy 13

如果您在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);
Run Code Online (Sandbox Code Playgroud)

  • 但这必须是`distance(myPosition,referencePosition)`. (2认同)