7
votes

Opengles mélange de particules mais pas de fond

J'ai le processus suivant:

 - draw background
 - draw objects and blend with background (1)GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA
 - draw particle effect with blending (2)GL10.GL_SRC_ALPHA, GL10.GL_ONE in order to highlight overlapping particles
  • Effet de dessin à une texture et qu'appliquer cela fonctionne bien ... mais extrêmement lent. li>
  • Équipement de particules dessinez d'abord et que l'arrière-plan, il a l'air d'être correct ... mais je ne peux pas dessiner un objet de scène que parce qu'ils doivent être entre BG et effet Li> ul>

    Voici l'écran pour montrer la différence. Sur le résultat souhaité droit, sur les particules de gauche sont mélangées à l'arrière-plan. P>

    img: p>

     Entrez la description de l'image ici p>

    J'apprécierai toute aide ... p>

    Dernières mises à jour: strong> J'ai pu obtenir la couleur que je veux ... mais ... (semble que cette façon me bougera nulle part) J'ai rendu des antécédents avec alpha = 0 et utiliser la fonction de mélange de GL11ext: GLBLENDFUNCSERATE (GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA, GL10.LL_DST_ALPHA, GL10.LL_OONE, GL10.GL_OONE); P>

    GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA - Les couleurs sont mélangées uniquement si elles ont alpha (bg ne pas avoir maintenant) p>gl10.l_one, GL10.gl_One - alpha est réglé sur le maximum pour toutes les particules écrites pour simuler le mélange additif P>

     Entrez la description de l'image ici p>

    Ça fonctionne bien comme vous pouvez le voir ... Sauf la zone de remplissage de couleur noire où l'image des particules a alpha 0..et quoi dans Image de résultat que la couleur noire a alpha 1, donc je ne peux pas le remplacer de quelque manière que ce soit ... p>

    edit_2 strong> Problème général en mots simples: j'ai besoin d'un effet rouge (mélange additif) rouge (0xFF0000). Sur fond noir, il est correct, mais si je prendrais vert (0x00FF00) que la couleur de résultat serait proche de 0xFFFF00 P>

    TOUT IDEES? P> P>


2 commentaires

Rendu à un travail tampon de cadre séparé? Faites-vous un mélange additif de toutes vos particules dans un tampon de cadre transparent complet puis effectuez un mélange alpha normal de ce tampon de cadre sur votre scène principale.


Oui cela fonctionne. Mais très lent, je perds près de 20fps seulement commuter les châssis


3 Réponses :


3
votes

GL10.GL_SRC_ALPHA, GL10.GL_One afin de mettre en évidence des particules de chevauchement

Il n'y a pas d'autre moyen que de mélanger additif pour éviter le besoin de tri des particules. Si vous voulez toujours rester avec ceci pour éviter de se chevaucher des particules, je vous suggère d'injecter un delier au rendu afin que vous puissiez réduire la brigité des particules rendues ou vous pouvez réduire la luminosité de la texture de particules.


8 commentaires

J'ai essayé de réduire la luminosité de la texture de particules, mais elle ne fonctionne pas, la texture est principalement de couleur rouge (proche de 0Xee) et une faible quantité de Geen, bleu. Pendant le mélange avec BG Rouge, il ne suffit qu'un peu, car il est presque maximum, mais vert et bleu sont considérablement augmentés. A cause de cette couleur est cassée.


Pourriez-vous expliquer ce que vous entendez par "pour injecter un contrôle de saignement dans le rendu afin que vous puissiez réduire la luminosité des particules rendues"


Je suppose que vous utilisez ES 1.0, vous pouvez effectuer un simple multiple en réglant le GLColor * à une valeur souhaitée, il multiplie avec la couleur que vous avez définie avec la couleur de la texture vous permettant de contrôler le contrôle fin des couleurs rendues. Donc, définir GLCOLOR4F (0.5,0.5,0.5,1.0); réduira la luminosité des textures à la moitié.


Actuellement, j'utilise GLColor pour les particules pour ajouter des changements de fadeout et de couleur pendant la vie. J'ai essayé de jouer avec cela.


Dans mon propre moteur, j'ai implémenté cela avec un mélange additif + Alpha Belnding + éteint l'écriture de profondeur ( i408.photobucket.com/albums/pp168/drakklord/... ). Vous devriez essayer de créer un simple alpha mélange d'abord avec Glblendfunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) pour obtenir le résultat de mélange souhaité.


Mais le simple mélange alpha ne peut pas fournir l'effet rougeoyant que j'ai besoin..s loin de je sais (et j'ai vérifié cela). Dans votre moteur Lorsque vous définissez différents antécédents, vous devez également obtenir le même problème, je suppose ..Si vous n'utilisez aucune astuce.


Vous avez déjà dit les astuces que j'utilise. Pourriez-vous modifier votre question peut-être que je vous trompe, quel type de mélange vous avez besoin, quel type de textures que vous utilisez, ce qui est dans l'arrière-plan a-t-il alpha écrit, etc.?


Ok..the le plus simple de montrer mon problème - si je pouvais vous demander de faire une simulation simple dans votre moteur. Sur la capture d'écran, vous avez posté avant de voir un petit effet de particules rouges à gauche. Pourriez-vous essayer d'obtenir exactement le même effet (rouge), mais sur fond vert (RVB - 0x00FF00)



1
votes

1 commentaires

Bonne idée Ryanm, il aide à éliminer les pixels noirs..mais toujours il y a un problème. Il y a beaucoup de pixels sur les bords d'effet qui a une très faible alpha, mais pas zéro. Ces pixels doivent être mélangés avec fond comme GL10.GL_SRC_ALPHA, GL10.GL_OONE_MINUS_SRC_ALPHA. Si j'aurais des shaders, ce serait simple que..mais ici avec 1.1 seulement ...



0
votes

Rendu à un travail tampon de cadre séparé? Avez-vous un mélange additif de toutes vos particules dans un tampon de cadre transparent complet puis faites un mélange alpha normal de ce cadre


0 commentaires