2010-06-05 21 views
0

J'essaie de créer une application de cube OpenGLES 2.0. L'idée était d'avoir une texture (avec un alpha de 75%) appliquée aux 6 faces du cube. Cela signifierait que même si je fais tourner le cube, je serais capable de voir les 6 faces à n'importe quelle image. Maintenant, j'ai activé le test de profondeur (mon application a besoin de ça !!) et le mélange. La fonction Profondeur est LEQUAL et la fonction de fusion est SRC_ALPHA, ONE_MINUS_SRC_ALPHA.Problème de fusion de profondeur d'iPhone OpenGLES

Maintenant, le problème est que certaines faces de cube ne montrent pas les faces sous-jacentes. Je ne suis pas capable de comprendre cela parce que la logique fonctionne bien avec les autres faces de cube. Juste pour l'enregistrement, j'ai désactivé CULL_FACE.

Merci d'avance.

Regards,

Puzzler

Répondre

2

visages sont établis afin qu'ils sont définis. Maintenant que le cube est tourné, leur ordre de tirage n'est pas modifié. Certains visages sont proches de l'appareil photo en premier. Ensuite, un visage est dessiné après cela, mais Z-test dit qu'il y a déjà un pixel plus près de la caméra, donc aucun dessin n'a besoin d'être fait.

Le problème ici est que OpenGL | ES 2.0 ne triera pas les faces quand elles sont rendues. La manipulation correcte de la transparence et de la profondeur reste un véritable défi dans la programmation 3D, mais pour un cas comme celui-ci, il suffit de trier les faces à l'avant. Le retour en arrière est appelé "algorithme du peintre" et le tri est appelé "tri en profondeur" ou "z-tri".

Simple, definetly pas le meilleur et sûrement moyen inefficace pourrait fonctionner comme ceci:

  1. sommet central Calculer la face en calculant la moyenne de trois sommets
  2. les du projet à l'espace de l'écran en les transformant par caméra (vue + projection) et modèles-matrices possibles
  3. Trier leurs valeurs Z par un algorithme de tri
  4. Construire un vertex buffer avec des sommets dans cet ordre ou simplement réécrire l'index tampon nouvel ordre (moins de choses à se déplacer si les sommets ne sont pas modifiés)
  5. cube Render comme d'habitude

Il y a de meilleures façons de gérer ce problème et là toutes sortes d'optimisations avancées là-bas. Mais je n'ai trouvé aucun tutoriel pour couvrir un cas simple comme celui-ci. Peut-être que je n'ai pas trouvé de bons mots-clés.

+0

Merci pour la réponse. Va essayer ceci – user359103