Je veux animer un certains nombres OpenGL2.0. Pour essayer de le faire démarrer, j'ai créé une minuterie et j'essaie de changer les chiffres en fonction de la minuterie. La minuterie est configurée sur une onde sin(), donc les nombres devraient augmenter puis diminuer à nouveau. Les nombres sont sur la ligne supérieure de l'atlas de texture donc en augmentant les coordonnées de texture dans la direction x le déplace vers le nombre suivant. J'ai essayé d'utiliser le fragment shader avec if pour déplacer les coordonnées de la texture mais je n'ai pas eu de chance. Je suis sûr qu'il doit y avoir une meilleure façon de le faire.La meilleure façon d'animer les textures en OpenGL ES 2.0
Fragment Shader
char FragShader[] =
"precision highp float;\n"
"varying highp vec2 textureCoordinate;\n"
"uniform sampler2D Texture;\n"
"uniform float time;\n"
"void main()\n"
"{\n"
"float c1 = 0.5*sin(time)+0.5;\n"
"if (c1 >= 0.0 && c1 < 0.1)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.1 && c1 < 0.2)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.1, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.2 && c1 < 0.3)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.2, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.3 && c1 < 0.4)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.3, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.4 && c1 < 0.5)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.4, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.5 && c1 < 0.6)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.5, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.6 && c1 < 0.7)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.6, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.7 && c1 < 0.8)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.7, 1.0 -textureCoordinate.y);\n"
"elseif (c1 >= 0.8 && c1 < 0.9)"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.8, 1.0 -textureCoordinate.y);\n"
"else"
"vec2 flipped_texcoord = vec2(textureCoordinate.x+0.9, 1.0 -textureCoordinate.y);\n"
"vec4 colour = texture2D(Texture, flipped_texcoord);\n"
"gl_FragColor = colour;\n"
"}\n";
Pouvez-vous expliquer l'animation désirée un peu plus? Quelle plate-forme utilisez-vous? – Clyde
Oh, et qu'est-ce que tu veux dire par "n'ai pas eu de chance"? Quels résultats obtenez-vous réellement? – Clyde
L'animation souhaitée sera un nombre changeant de 0 à 9 et reculer à nouveau comme l'onde sin créé par la minuterie se déplace. Avec cette configuration rien ne se passe, je reçois un écran vide, mais pas de messages d'erreur. Je sais que le minuteur, les coordonnées de texture et glFragColor fonctionnent comme je les ai testés individuellement. Cela m'amène à croire que c'est quelque chose à voir avec les déclarations if utilisées. –