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 :

Geometry shader, impossible de dessiner un rectangle


Sujet :

OpenGL

  1. #81
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    ça dépend , les calcul de vertex , c'est assez rapide , et si ton objet est loin , il va ignorer pas mal de vertex et de pixel à draw.
    Par contre si tu es proche et que ton shader est lent , alors oui ça sera long et ça se verra , mais on peut pas savoir par rapport au info que tu nous donne .

  2. #82
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Par défaut
    Bon en fait c'est cette gravité apparemment qui pose problème, sans doute à cause du acos(), je suis entrain de tester.

    Edit : C'est bien acos() le coupable

  3. #83
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Citation Envoyé par KevinduC Voir le message
    Edit : C'est bien acos() le coupable
    Je t'ai pourtant bien dit d'oublier acos...
    Le second point que tu devra apprendre (pour éviter de perdre du temps à tout le monde) , c'est que tu apprends à debugger ton code d'un point de vue des performance et donc savoir ce qui doit être optimisé ou pas.

    Quand tu aura fait ce taff ,tu reviendra nous voir.

  4. #84
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Par défaut
    Ah désolé pour la perte de temps ...

  5. #85
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    bonjour Kevin vous devez mal utiliser Open GL sans doute les matrices de transformation.
    Voilà le résulat que j'obtiens avec Visual Studio + Direct X9 pas de shaders pas de code GPU juste un rendu basique le brouillard est activé,aucune optimisation.
    Il y a 1200 billboards dans ma scène, deux "meshes" le sol et le ciel dans le fon c'est juste deux tuiles, c'est assez fluide et en fenêtré.
    La végétation c'est création perso.
    En plein écran évidemment ça bombarde et je peux monter certainement à plus de 2000 billboards j'ai pas testé encore

    sinon LittleWhite mentionne le multitexturing ça c'est un truc primordial si on veut avoir un bon rendu photo-réaliste.
    Au besoin c'est limite être contraint d'utiliser un truc comme Substance Painter évidemment un outil payant.

    Nom : foret_bb3.jpg
Affichages : 121
Taille : 244,7 Ko

    autre exemple

    Nom : foret_bb4.jpg
Affichages : 120
Taille : 209,0 Ko

  6. #86
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Par défaut
    J'utilise déjà le multitexturing, j'ai par exemple deux textures dans le cas des arbres : Une pour l'écorce et une pour les feuilles. Mais je pense que le problème vient du modèle d'arbres qui était trop lourd : Sans m'en rendre compte il y avait plusieurs milliers de sommets pour un exemplaire d'arbres alors instanciation ou pas je pense que ça devient lourd pour le GPU au bout d'un moment. Sinon je n'ai pas le code à portée de main mais voici comment je procède pour générer les arbres :

    Avant le rendu :

    - Initialisation des coordonnés de sommets, de texture, normales et autres attributs
    - Chargement des textures
    - Chargement du shader
    - Création VAO
    - Allocation mémoire vidéo avec glBufferData()
    - Mise en mémoire vidéo avec glBufferSubData()
    - Initialisation attributs avec glVertexAttribPointer()
    - Activation attributs avec glEnableVertexAttribArray()
    - Config instanciation avec glVertexAttribDivisor()

    Pendant le rendu :

    - Activation shader avec glUseProgram()
    - Bindage textures et multitexturing avec glActiveTexture() et glBindTexture()
    - Envoi textures, matrices et autres éventuels paramètres avec glUniform*()
    - Bindage VAO avec glBindVertexArray()
    - Rendu avec glDrawArraysInstanced()

    Pour le moment j'ai un peu mis les arbres de côté car ce n'est pas la priorité de mon projet, je me concentre plutôt sur les routes et en particulier sur la notion de octrees pour avoir une gravité optimisée car il y a plusieurs centaines de milliers de triangles composant ces routes et ça donne une boucle avec autant d'itérations par frame donc c'est assez lourd.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    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 150
    Billets dans le blog
    150
    Par défaut
    Pour les routes ... hum ... je pense que d'habitude, on n'utilise pas un modèle 3D pour ça. J'aurais cru que c'était juste une texture sur le sol (sauf si vous faites des routes aériennes/futuristes à la F-ZERO GX). Bref, pour moi, une route, comme dans les jeux de rally, c'est juste du modelage du terrain sur lequel on "trace" une texture de route et les fossés sur le côté en faisant un creux.
    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.

  8. #88
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Pour les routes ... hum ... je pense que d'habitude, on n'utilise pas un modèle 3D pour ça. J'aurais cru que c'était juste une texture sur le sol (sauf si vous faites des routes aériennes/futuristes à la F-ZERO GX). Bref, pour moi, une route, comme dans les jeux de rally, c'est juste du modelage du terrain sur lequel on "trace" une texture de route et les fossés sur le côté en faisant un creux.
    J'ai pensé à cette méthode mais il faudrait stocker des données comme le tracé des routes et trouver un moyen d'envoyer ces données au fragment shader. J'aimerais procéder de cette manière car je m'aperçois qu'il y a un problème de précision entre Blender et mon programme :

    Nom : Capture1.jpg
Affichages : 127
Taille : 365,0 Ko
    (Blender)


    Nom : Capture2.jpg
Affichages : 124
Taille : 224,8 Ko
    (Programme)

    Je crois que c'est parce que j'ai des valeurs comme -16969.662109 dans mon fichier .obj qui deviennent -16969.7 par exemple

  9. #89
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    bonsoir Kevin si vous voulez qu'un véhicule suive une route, une astuce un peu basique c'est de placer des objets un peu au-dessus de la route par exemple de bêtes cubes qui ne seront pas affichés.
    Ensuite le véhicule pour suivre la route devra passer par chacun de ces cubes, il suffit de parcourir une liste qui mémorise ces cubes.
    Pour la trajectoire du véhicule, il faut encore une fois calculer l'angle entre le cube suivant et le véhicule,le véhicule étant orienté selon cet angle.
    Après la trajectoire du véhicule sera calculée avec positionX=cos(angle)+position_precedenteX et positionY=sin(angle)+position_precedenteY

  10. #90
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par KevinduC Voir le message
    je m'aperçois qu'il y a un problème de précision entre Blender et mon programme :

    Nom : Capture1.jpg
Affichages : 127
Taille : 365,0 Ko
    (Blender)

    Nom : Capture2.jpg
Affichages : 124
Taille : 224,8 Ko
    (Programme)
    Oh le joli z-fighting ! (Pas étonnant, avec les nombres que tu donnes)
    Il faut savoir que le depth buffer a une précision limitée, du coup il faut ruser (scaling de la scène, ajustement des near/far planes de ta caméra, notamment)


    Citation Envoyé par KevinduC Voir le message
    Je crois que c'est parce que j'ai des valeurs comme -16969.662109 dans mon fichier .obj qui deviennent -16969.7 par exemple
    As-tu comparé les valeurs binaires, pour affirmer ça, ou tu as juste affiché sans te soucier de la précision lors de l'affichage ? (ça se configure, que ce soit avec printf ou std::iostream)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  11. #91
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Par défaut
    Non ce n'est pas un conflit de profondeur car quelque que soit l'angle sous lequel on observe la scène on voit que la route est bien sous le sol :

    Nom : Capture.jpg
Affichages : 91
Taille : 281,3 Ko

    Effectivement il n'y a apparemment pas d'erreur de précision dans la lecture du fichier car si je fixe la précision de std::cout à 6 chiffres après la virgule j'obtiens bien les mêmes valeurs donc je ne vois pas d'où vient cette erreur dans le rendu. Mais c'est pas grave, je vais tricher et aplanir le terrain

Discussions similaires

  1. [C#][Direct3D] Comment dessiner un rectangle
    Par FraktaL dans le forum DirectX
    Réponses: 3
    Dernier message: 26/10/2005, 00h29
  2. Réponses: 14
    Dernier message: 13/10/2005, 15h00
  3. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  4. [VB.NET] Dessiner plusieurs rectangles.
    Par Emcy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/03/2005, 16h57
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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