Je veux rendre de nombreux sprites, et je veux colorer chaque sprite dans une couleur (pour un effet arc en ciel) en utilisant un shader. (La texture Sprite est initialement en niveaux de gris)Définir la couleur par sprite en utilisant SpriteBatch et la couleur vertex?
D'abord je l'ai fait avec un uniforme, où j'ai passé une couleur, que j'ai calculée en dehors du shader. Cela a bien fonctionné, mais c'était trop lent. Puis j'ai découvert que c'était trop lent parce que je mettais cet uniforme plusieurs fois par image. J'ai trouvé ce qui suit:
[...] teinter une image-objet OpenGL peut facilement être fait en définissant les couleurs des sommets. Puisque les sommets dans ce cas sont définis par SpriteBatch.draw(), vous devez définir la couleur avec SpriteBatch.setColor(). [...]
Et j'ai essayé de le faire:
en render():
batch.setShader(shader);
batch.setColor(.5f, .3f, 1, 1);
sprite.draw(batch);
batch.setColor(1, 1, 1, 1);
batch.setShader(null);
vertex shader:
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
fragment shader:
void main() {
v_color = a_color*gl_Color*2.0;
gl_FragColor = v_color * texture2D(u_texture, v_texCoords);
}
Ok, je ne suis pas très familier avec les shaders GLSL, et c'est peut-être pourquoi maintenant ça ne dessine rien. Je suppose qu'il me manque quelque chose et je n'arrive pas à comprendre quoi.
Comment puis-je colorer une image-objet dans une couleur? Pour que ça marche vite?
Vous n'avez pas besoin de shader personnalisé pour cela, le shader SpriteBatch par défaut supporte déjà la teinture. – Xoppa