IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SFML Discussion :

Rendu 3D OpenGL dans une RenderTexture et problème de DepthBuffer


Sujet :

SFML

  1. #1
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut Rendu 3D OpenGL dans une RenderTexture et problème de DepthBuffer
    Bonjour,
    J'essaye de mixer OpenGL et SFML.
    J'ai dans un premier temps fait un rendu direct d'OpenGL et ça marche très bien en respectant la profondeur.
    J'ai utilisé ça pour la profondeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    glEnable(GL_DEPTH_TEST)
    glDepthMask(GL_TRUE)
    glClearDepth(1.)
    Sans se soucier de l'ordre du rendu, mes objets seront dessinés avec la bonne profondeur.
    Cependant, quand je redirige le rendu dans une RenderTexture, la profondeur est foutue en l'air, les objets sont affichés selon l'ordre des appels d'affichage dans le code et cela reste ainsi même si l'objet change de position et se retrouve derrière un autre.
    Une idée svp?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 141
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Il est possible (probable) que vous n'ayez pas lié de d'attache pour la profondeur à votre cible de rendu (RenderTexture).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut
    Effectivement, j'ai rajouté un troisième paramètre true à la création du RenderTexture qui permet d'attacher un DepthBuffer à celle-ci. Avec un exemple de cube tout simple ça marche très très bien! Cependant avec mon exemple un peu plus compliqué, l'affichage est très bizarre, tu as peut-être déjà expérimenté ce genre de chose :
    -en à peine une frame, j'ai ma scène qui s'affiche avec des artefacts noirs en diagonale!
    -ensuite, tout est noir, enfin plus en moins, j'ai mon sprite 3D (billboard) qui s'affiche partiellement.
    -quand je déplace le sprite, ce-dernier s'affiche sur un fond noir, mais disparaît partiellement quand je ne le déplace plus.
    -quand je déplace la caméra pour être proche des objets la scène s'affiche normalement mais en une ou deux frame seulement et redeviens tout noir.
    Je suis en pleine investigation
    Je me demande ce que ça peut-être la raison de ce deuxième problème!

  4. #4
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut
    J'ai trouvé la solution, c'est tout con
    Il faut mettre ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # clear the depth buffer
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    	glEnable(GL_BLEND);
    	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    	glBlendEquation(GL_FUNC_ADD);
    	glEnable(GL_ALPHA_TEST);
    	glAlphaFunc(GL_GREATER, 0.1)
    	scene_render_texture.clear(sf.Color.TRANSPARENT)
    après l'activation du rendertexture
    Le depth buffer étant cleared avant l'activation, ça faisait un bug et des artefacts improbables!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Double affichage OpenGL dans une meme fenetre
    Par greghass dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/11/2006, 21h57
  2. Réponses: 3
    Dernier message: 10/10/2006, 16h30
  3. Réponses: 5
    Dernier message: 06/08/2006, 19h38
  4. [MySQL] menu select dans une page include problème de paramètres
    Par starr dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/07/2006, 08h42
  5. afficher de l'opengl dans une fenetre web
    Par soubre dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/09/2005, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo