2011-10-12 5 views
2

J'essaye de dessiner une texture des deux côtés d'un triangle sous Android. J'ai le code ci-dessousDans Android OpenGL ES 1.1, comment dessiner la texture des deux côtés du triangle?

float textureCoordinates[] = { 0.0f, 0.0f, // 

       0.0f, 1.0f, // 
      1.0f, 0.0f 
    }; 
    short[] indices = new short[] { 0, 1, 2 }; 
    float[] vertices = new float[] { -0.5f, 0.5f, 0.0f, // p0 
      -0.5f, -0.5f, 0.0f, // p1 
      0.5f, 0.5f, 0.0f, // p2 
    }; 

Maintenant avec cela, je suis en mesure d'obtenir le triangle avec la texture. Mais quand je le fais pivoter le long de l'axe y après une rotation de 180 degrés, je vois la même image de l'autre côté du triangle. Je voudrais changer la texture du triangle de l'autre côté. S'il vous plaît laissez-moi savoir comment le faire.

Répondre

2

Ceci n'est pas possible avec un seul appel de fonction. Lors de l'utilisation de fragment shaders (ES 2), vous pouvez interroger la variable d'entrée de fragmenteur de fragment intégré gl_FrontFacing pour déterminer si le fragment actuel appartient à l'avant ou à l'arrière de son triangle. Alors vous écrire quelque chose comme ceci:

uniform sampler2D frontTexture; 
uniform sampler2D backTexture; 

varying vec2 texCoord; 

void main() 
{ 
    if(gl_FrontFacing) 
     gl_FragColor = texture2D(frontTexture, texCoord); 
    else 
     gl_FragColor = texture2D(backTexture, texCoord); 
} 

Lors de l'utilisation du pipeline de fonction fixe (ES 1) vous ne serez pas autour rendu deux versions de votre objet, l'une avec la texture avant et l'autre avec la texture de retour . Vous pouvez faciliter l'abattage pour éviter les problèmes de profondeur. Donc, ce serait quelque chose comme ceci:

glEnable(GL_CULL_FACE); 

glCullFace(GL_BACK);  //render only front faces 
glBindTexture(GL_TEXTURE_2D, frontTexture); 
<draw object> 

glCullFace(GL_FRONT);  //render only back faces 
glBindTexture(GL_TEXTURE_2D, backTexture); 
<draw object> 

Comme je ne sais pas comment les appareils ES et modernes manipuler de branchement dans le shader (bien que dans ce cas, tous les fragments devraient prendre le même chemin), il est peut-être, que la seconde approche associée à un simple shader de fragments à une texture pourrait également être la solution préférée pour ES 2, en termes de performances.

+0

Merci beaucoup pour votre réponse. Je pense que cela devrait fonctionner. Je vais essayer et vous le ferai savoir. Je vous remercie. – Vinodtiru

Questions connexes