2015-08-29 4 views
1

Je ne peux pas comprendre, comment puis-je dire à libgdx de dessiner mes sphères vertes derrière mon décalque transparent.Libgdx culling entre modelinstances décalques

Voici une image par exemple de mon problème:

enter image description here

La création décalcomanie: deux premiers params sont la largeur et la hauteur, le dernier drapeau est wether transparent ou non.

Decal.newDecal(count * (GUTTER + BUTTONWIDTH) + GUTTER, 2 * GUTTER + BUTTONHEIGHT, 
      new TextureRegion(new Texture(Gdx.files.internal("icons/uibg.png"))), true); 

La création de la sphère:

builder.createSphere(
      FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2, 
      6, 6, 
      new Material(ColorAttribute.createDiffuse(Color.GREEN)), 
      VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal); 

Et la méthode render:

this.models = new ModelBatch(); 
this.decals = new DecalBatch(new CameraGroupStrategy(camera)); 
... 
// adding decals and models to render queue 
... 

public void update(float deltaTime){ 
    super.update(deltaTime); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 

    models.begin(camera); 
    for (Entity entity : queue) { 
     ModelInstance model = Mappers.Object.get(entity).instance; 
     models.render(model, environment); 
    } 

    decals.flush(); 

    models.end(); 
    queue.clear(); 
} 

Je vous remercie tous les conseils.

// EDIT

Ajouté le Blendingattribute aux sphères et un .7 opacitiy. Cela marche. Mais je suppose que le problème est en quelque sorte entre le décalque et le rendu du modèle, parce que la grille en arrière-plan est un décalque et on peut le voir à travers la décalcomanie transparente noire mais les sphères ne peuvent pas.

Le nouveau code de matériel:

Material mat = new Material(); 
    mat.set(ColorAttribute.createDiffuse(Color.GREEN)); 
    mat.set(new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, 0.7f)); 
    fingerTip = builder.createSphere(
      FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2, 
      6, 6, 
      mat, 
      VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal); 

Voici une autre image: les deux sphères milieu ne sont pas rendus derrière l'autocollant transparent comme ils le devraient.

enter image description here

+0

Veuillez nous donner un code pour voir ce que vous faites. Nous pouvons juste deviner ici. Par exemple, ajoutez le code de création de l'instance de rendu et du modèle. – BennX

+0

Vous devez ajouter des informations de fusion par exemple 'materials.get (0) .set (new BlendingAttribute (GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA))' – BennX

Répondre

0

Appel models.end() avant decals.flush(). Des trucs transparents doivent être dessinés après des trucs opaques. En ce moment, vous dessinez la décalcomanie en premier, de sorte qu'elle écrit sa profondeur dans le tampon avant que les sphères ne soient dessinées.

Si vos modèles sont également transparents, cela devient plus compliqué. Vous devrez trier vos décalques avec vos modèles en quelque sorte, et rincer les modèles arrière avant de vider la décalcomanie, et enfin vider les modèles proches.