我想渲染许多精灵,并且我想用着色器为每个精灵着色(彩虹效果)。 (雪碧纹理最初是在灰度)使用SpriteBatch和顶点颜色为每个精灵设置颜色?
首先我做了一个制服,在那里我传递了一种颜色,我在着色器之外计算了颜色。这工作得很好,但速度太慢。
然后我发现它太慢了,因为我每次都会将这个制服设置多次。我发现:
[...]着色在OpenGL精灵可以很容易地通过定义顶点颜色来完成。由于这种情况下的顶点由SpriteBatch.draw()定义,因此应该使用SpriteBatch.setColor()设置色调。 [...]
我试着这样做:
在渲染():
batch.setShader(shader);
batch.setColor(.5f, .3f, 1, 1);
sprite.draw(batch);
batch.setColor(1, 1, 1, 1);
batch.setShader(null);
顶点着色器:
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
片段着色器:
void main() {
v_color = a_color*gl_Color*2.0;
gl_FragColor = v_color * texture2D(u_texture, v_texCoords);
}
好吧,我不熟悉GLSL着色器,也可能是为什么现在不绘制任何东西。我想我错过了一些东西,我无法弄清楚什么。
我该如何为一个颜色的精灵着色?这样它的工作很快?
您不需要自定义着色器,默认的SpriteBatch着色器已经支持着色。 – Xoppa