2010-02-16 4 views
5

Je ne suis pas sûr s'il y a un nom pour cela, mais essentiellement ce que je dois faire est de prendre deux sprites opaques, les dessiner à 50% d'opacité, et où ils se chevauchent. Je l'ai l'air plus sombre.Rendu d'objets translucides qui se chevauchent sans obscurcir le chevauchement

Example Image http://i45.tinypic.com/n35281.gif

L'image à gauche est la façon dont il est rendu à l'origine. Ensuite, je veux diminuer l'alpha du rendu, et par défaut, j'obtiens l'image au milieu, mais je veux obtenir l'image sur la droite. J'utilise cocos2d sur l'iPhone et maintenant je rends les sprites en utilisant un Atlas Sprite Manager, qui n'a pas son propre alpha, donc j'ai essayé de diminuer l'alpha en diminuant l'alpha de chaque sprite individuellement et aussi diminuer l'alpha de l'image source, dont je ne m'attendais pas vraiment à travailler.

Y a-t-il un mode de fusion que je peux activer, ou un moyen (rapide) de rendre l'image totalement opaque à un tampon secondaire puis de diminuer l'opacité du tampon avant de le mélanger avec le tampon principal?

Répondre

3

AFAIK il n'y a pas moyen de contourner cela. Les alternatives auxquelles je peux penser sont: -

  1. Modifiez la géométrie de manière à ce que les objets ne se chevauchent pas (plus difficile à coder mais plus performant).
  2. Rendu les objets à une texture à pleine opacité, puis rendu alpha-blended.
  3. Utilisez un tampon stencil (si l'iPhone prend en charge les tampons stencil que je soupçonne pas). Commencez par le pochoir à zéro, mis à écrire un 1 lorsque vous dessinez vos polys translucides et définir la condition de tirer seul le fragment si le tampon est 0.
+0

numéro 2 est exactement ce que je pense Faire. Cela serait-il particulièrement lent? –

+0

C'est essentiellement ce que fait UIKit lorsque vous définissez l'opacité d'un UIView à moins de 1.0 - la vue est rendue dans son intégralité à son propre bitmap, puis elle est composée à l'écran. Cela signifie que vous faites tout ce que vous avez fait pour vos formes plus 2 autres lectures et 1 écriture par pixel de l'image bitmap hors écran. Je pense que tout ira bien tant que vous ne faites pas le tout pour chaque 'sprite' et que vous ne copiez pas plus de pixels que nécessaire dans l'opération de fusion. – U62

Questions connexes