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

OpenGL Discussion :

Problème de ShadowMapping


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut Problème de ShadowMapping
    Bonjour à tous.

    Pour résumé, j'ai récupérer le code d'un collège de classe pour ntore projet, il était chargé d'implémenter le ShadowMapping. Il m'a fait un beua copier/coller d'un site web et là je suis en train de voir comment me débrouiller avec la chose. J'ai compris le principe, a peu près suivit les diverse phases mais j'ai encore quelques imcompréhensions.

    1. J'utilise des outlinedFOnt chargé avec wglUseFontOutlines() ; en mode fil de fer pas de problème ; par contre en mode polygone, ca fait foirer le rendu de ma scène ( je supose un manque de normals) Y a til moyen de remédier à ce problème? Dois-je me passer des OutlinedFont crée de cette façons ?

    2. J'ai constaté que le code que mon ami m'a passé change beaucoup d'états d'opengl sans forcément les remettres comme ils étaient avant... je suis en train d'y remédier et je cherche à organiser mes phases de rendus au mieux.
    Est-ce une bonne idée de faire 2 fonctions de Draw() pour chaqun de mes objets .... 1 pour les rendus de calculs d'ombre et une pour les rendus sans ombres ?
    Y-a-til des choses dont je peux me passer (si je procède ainsi) lors des phases de rendus d'ombres (textures par exemple ?)

    Je suis preneur de tout conseils pour organiser mes programmes autour de ce calculs d'ombres ;o) (qui par ailleurs ; marche à peu près correctement )

    Merci d'avance .

  2. #2
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Par défaut
    Citation Envoyé par Clad3 Voir le message
    1. J'utilise des outlinedFOnt chargé avec wglUseFontOutlines() ; en mode fil de fer pas de problème ; par contre en mode polygone, ca fait foirer le rendu de ma scène ( je supose un manque de normals) Y a til moyen de remédier à ce problème? Dois-je me passer des OutlinedFont crée de cette façons ?
    Help us help you.

    Ce que tu racontes n'a pas le moindre détail qui permettrait d'avoir la moindre idée de ce qu'est ton problème. On imagine que ça implique des outlined fonts, mais c'est tout. C'est quoi "foirer le rendu de ma scène" ?

    Citation Envoyé par Clad3 Voir le message
    2. J'ai constaté que le code que mon ami m'a passé change beaucoup d'états d'opengl sans forcément les remettres comme ils étaient avant... je suis en train d'y remédier et je cherche à organiser mes phases de rendus au mieux.
    un code de rendu n'a pas obligation à "remettre les états comme ils étaient", et c'est le plus souvent contre productif.

    En fait la seule obligation c'est de mettre les états qui sont nécessaires pour le prochain draw call.
    Bien entendu il faut un "système" pour éviter
    1- d'oublier de mettre la machine à état OpenGL dans une configuration particulière (par exemple oublier que l'on a activé le blending avant de rendre des objets qui sont sensé être opaques et qui donc n'ont pas besoin de blending).
    2- de changer les états trop souvent et de manière redondantes (par exemple activer le blending, puis le désactiver avant d'avoir tracé quoi que ce soit) ce qui aura au final un impact sur les performances.

    Bien entendu c'est 1 qui est à mettre en place en priorité et 2 qui est nécessaire pour avoir un jeu jouable dans les meilleures conditions.

    Exemple de système possible : un système où chaque état fait partie d'un "matériel"/"transform"/"paramètres par objet"/"contexte de rendu". Si un matériel partage une partie de la configuration avec l'objet tracé précédemment il n'y a alors pas besoin de remettre à jour les états correspondant.
    Par exemple, toujours sur le blending. Si on trace tous les objets opaques en premier il n'est pas nécessaire de désactiver le blending entre chaque nouvel objet tracé. Il suffit de le désactiver une seule fois au début du tracé des objets opaques puis le remettre lorsque tu auras à tracer un lot d'objets transparents.

    Citation Envoyé par Clad3 Voir le message
    Est-ce une bonne idée de faire 2 fonctions de Draw() pour chaqun de mes objets .... 1 pour les rendus de calculs d'ombre et une pour les rendus sans ombres ?
    Y-a-til des choses dont je peux me passer (si je procède ainsi) lors des phases de rendus d'ombres (textures par exemple ?)
    Si tu utilises les shadow depth maps, ce n'est pas seulement une bonne idée, c'est la seule solution.
    Tu fais une première passe pour remplir la depth map, et une deuxième passe où tu utilises la depth map comme texture pour faire l'éclairage et l'ombrage de la scène "normale". Pour la phase d'ombre, tu n'as besoin que des infos de profondeur. La couleur n'a aucune importance donc oui la texture peut être ignoré.. dans la mesure où elle n'affecte pas la visibilité de l'objet (exemple si tu as des feuilles avec un masque de visibilité alpha qui utilise une texture). Si il y a des objets dont la visibilité partielle est déterminée par une texture alors tu dois utiliser cette texture lors du rendu pour avoir une depth map précise. De même si tu fais du displacement mapping ou tout autre méthode qui modifie la géométrie/profondeur/visibilité.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Merci des réponses :

    1. J'utilise des outlinedFOnt chargé avec wglUseFontOutlines() ; en mode fil de fer pas de problème ; par contre en mode polygone, ca fait foirer le rendu de ma scène ( je supose un manque de normals) Y a til moyen de remédier à ce problème? Dois-je me passer des OutlinedFont crée de cette façons ?
    En fait, l'éclairage de ma scène n'est plus bon, je ne saurais pas dire pourquoi ni comment ca l'impact exactement . A première vue, il y a beaucoup trop d'ombres au final sur ma sène ; mais selon les modification que je fais dans mon code, je peux simplement avoir un résultat avec de multiple artefact de couleur blanches parmis les ombres). A priori, je dirai que ca vient d'un manque de "Normales" mais je n'en suis pas certain . Le problème est uniquement l'appel à ma calllist de rendu des fonts. J'ai utilisé le mode WGL_FONT_POLYGONS en tant que format pour mes données ; ce qui d'après le web , semble la bonne solution pour obtenir des normales.


    Concernant mon problème d'état openGL, en réfléchissant hier soir, j'en suis arrivé à l'idée suivante : finalement ne pas faire plusieur fonction de rendu mais une seule, et laisser la gestion des état openGL non pas à mes objets ( sauf cas particulier) mais à mes moteurs (gestionnaire) de rendu, que j'apellerai entre chaque phase de rendu. Ca se tient ? En opossition à : Chaque objet met à X les état dont il a beosin en début de sa fonction de Rendu et les remet à "normal" en fin de son rendu.
    ( J'élimine pour l'instant l'optimisation que tu mentionne, de regrouper les objets à rendre par état de rendu par grand manque de temps, mais je garde l'idée sous le coude )

    Si tu utilises les shadow depth maps, ce n'est pas seulement une bonne idée, c'est la seule solution.
    En fait, je me suis mal exprimé (ou j'ai du mal comprendre ta réponse).
    Ce que je disait c'est que , de toutes façons j'apelle 3 fois une fonction Render() mais que j'avais envisagé de faire des fonction spécifique de rendu par objet en fonction du type de rendu souhaité. Mais le problème de cela, c'est que ca ne me permet plus du tout de faire ce que j'énonce plus haut dans ce même post : c-a-d de gérer mes états avec mes moteurs de rendus et non l'inverse.

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Pourrais-t-on avoir une image de ton rendu pour voir les artefacts ? A mon avis le problème vient du z-fighting et il faut peut-être rajouter de l'offset (glPolygonOffset).

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Je suis en trin de régler un autre problème sur mes fonts, dés que c'est fait, je repasse au shadowmapping et je fais un screen du problème ! Stay tuned

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Voila ce que cela donne , sans outlined font à l'écran et avec (en pièce attachées). Les résultat sont les même sans l'affichage du quad texturé, donc n'en tenez pas compte .
    Images attachées Images attachées   

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2013, 17h55
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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