2 votes

Glcolor4ub dans opengl es 2.0

J'ai quelques fonctions qui utilisent OpenGL pour dessiner des lignes à l'écran (barres de vie) et je suis récemment passé d'OpenGL ES 1.1 à OpenGL ES 2.0. J'utilisais glColor4ub(50,160,50,255); pour changer la couleur de la ligne en vert avant de la rendre à l'écran, mais cette fonction semble ne pas exister dans la version 2.0. Il dit que ce n'est pas valide et rend simplement toutes les lignes blanches.

Existe-t-il une autre façon de changer les couleurs des lignes? J'ai essayé de chercher, mais il ne semble pas y avoir quelqu'un avec la même question. Cela pourrait être quelque chose de simple que je ne vois pas.

Mon jeu utilise cocos2d 2.0 et les barres de vie sont à peu près la seule chose que j'utilise directement OpenGL pour rendre. Tout le reste utilise des feuilles de sprites et autres. Merci pour toute aide.

3voto

mrwalker Points 1118

Tout comme pour tout le reste en OpenGL ES 2.0, vous devez envoyer la couleur de la ligne à votre fragment shader (via le vertex shader en tant qu'attribut de sommet, ou directement en tant que uniforme) et afficher la couleur dans votre fragment shader.

Dans le cas le plus simple, vous pourriez utiliser une valeur statique dans le fragment shader :

void main(void) {
    gl_FragColor = vec4(50.0/255.0, 160.0/255.0, 50.0/255.0, 255.0/255.0);
}

Si vous voulez varier la couleur à l'exécution, envoyez une valeur au fragment shader en tant que uniforme :

GLfloat color[4];
color[0] = 50.0/255.0;
color[1] = 160.0/255.0;
color[2] = 50.0/255.0;
color[3] = 255.0/255.0;

GLint lineColorSlot = glGetUniformLocation(shaderProgram, "LineColor");
glUniformMatrix4fv(lineColorSlot, 1, 0, color);  

Le fragment shader :

uniform lowp vec4 LineColor;

void main(void) {
    gl_FragColor = LineColor;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X