5

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

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);

我绘制的形状会自行闭合,是否可以用(径向)渐变填充这个形状?如果是这样,该怎么做?

4

1 回答 1

14

如果您在 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);
于 2011-07-14T18:55:23.103 回答