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

Moteurs 3D Discussion :

Questions en vrac : bit shift, frustrum etc


Sujet :

Moteurs 3D

  1. #1
    Membre confirmé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Points : 479
    Points
    479
    Par défaut Questions en vrac : bit shift, frustrum etc
    bonjour bonjour...

    J'ai des questions un peu "newbies", ou un peu pointues, à vous de voir

    Pure C++ :
    Le bit shifting est il toujours d'actualité sous C++ ? Est il plus rapide de faire un shift qu'une division ? (genre division par 256 ou >>8) Est ce toujours d'actualité ou bien avec les processeurs d'aujourd'hui cela est devenu inutile, comme les fixed points vs float...

    OpenGL:
    Comment marche la fonction glFrustrum? Je veux dire, vaut'il mieux l'utiliser ou me programmer mon propre frustum ? Sera-ce plus rapide ? (et que dire de gluPerspective ?)

    Quel algo vous me conseillieriez pour l'affichage de heightmap ? RAOM, geomipmapping, Quadtree... ou bien rien, ça passe très bien suivant le nombre de polygones...

    J'ai trouvé un algo qui utilise les fragment shaders pour l'occlusion des parties invisibles, mais cela ne va t'il pas me pomper de la bande passante pour l'affichage du reste ?

    Rho làlà, que de questions... ça va peut être servir pour la FAQ qui sait ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le bit shifting est il toujours d'actualité sous C++ ? Est il plus rapide de faire un shift qu'une division ? (genre division par 256 ou >>8) Est ce toujours d'actualité ou bien avec les processeurs d'aujourd'hui cela est devenu inutile, comme les fixed points vs float...
    S'il s'agit d'une portion de code critique ça peut être intéressant, sinon ne te prends pas la tête avec ça. Il y a peu de chances que ce soit ce qui va ralentir ton moteur 3D. Et si les opérandes sont des constantes connues à la compilation, je pense que c'est le genre d'optimisation que le compilo peut effectuer assez facilement.

    Comment marche la fonction glFrustrum? Je veux dire, vaut'il mieux l'utiliser ou me programmer mon propre frustum ? Sera-ce plus rapide ? (et que dire de gluPerspective ?)
    Ces fonctions ne font que construire une matrice adéquate ; aucune raison de s'inquiéter de leur temps d'exécution. Et qu'est-ce qui te fait penser que tu pourrais en écrire une version plus rapide ?

    Quel algo vous me conseillieriez pour l'affichage de heightmap ? RAOM, geomipmapping, Quadtree... ou bien rien, ça passe très bien suivant le nombre de polygones...
    ROAM, geomipmaps, ... sauf cas très particulier, ces méthodes ne sont plus d'actualité vu la puissance de calcul du hardware actuel.
    Quadtree, octree toujours utiliser une structure de partitionnement (voir FAQ 3D), c'est la base pour des performances correctes sur des grosses scènes.

    J'ai trouvé un algo qui utilise les fragment shaders pour l'occlusion des parties invisibles, mais cela ne va t'il pas me pomper de la bande passante pour l'affichage du reste ?
    Ca dépend de beaucoup de choses... Globalement l'occlusion culling est très couteux quoiqu'il arrive, il faut juste trouver la technique la plus adéquate pour chaque situation.

  3. #3
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par LapinGarou
    bonjour bonjour...

    J'ai des questions un peu "newbies", ou un peu pointues, à vous de voir

    Pure C++ :
    Le bit shifting est il toujours d'actualité sous C++ ? Est il plus rapide de faire un shift qu'une division ? (genre division par 256 ou >>8) Est ce toujours d'actualité ou bien avec les processeurs d'aujourd'hui cela est devenu inutile, comme les fixed points vs float...

    Ouais je suis d'accord avec Loulou24 si tu veux optimiser en assembleur....
    Mais maintenant les CPU font des calculs aisément en virgule flottante etc...
    Faire un shift pour une grosse boucle ça peut être intéressant....

  4. #4
    Membre confirmé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Points : 479
    Points
    479
    Par défaut
    Ok merci pour ces precisions.
    Concernant glFrustum, c'est pour savoir si le clipping est déjà partie intégrante, ou bien si il faut que je code moi même le clipping, comme je le vois dans beaucoup de tutoriels en pdf...

    Pour l'occlusion :
    En fait, je cherche un algo qui me permette de ne pas calculer les triangles cachés sans passer par les quadtree ni rien de si compliqué (c'est pour un exposé, alors si je me noie dans le compliqué...) : j'en élimine avec le back face culling, mais par exemple: je suis au pied d'une montagne, derrière se trouve une colline. En mode WireFrame, je vois que des triangles de la collines sont rendus, alors qu'au rendu final texture, ils sont invisibles, cachés par ceux de la montange OpenGL affichant de zfar à znear j'en conclu.
    Comparer les coordonnes ecran et tenant compte compte du z de chaque coin ou passer par un algo "painter" ?

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Concernant glFrustum, c'est pour savoir si le clipping est déjà partie intégrante, ou bien si il faut que je code moi même le clipping, comme je le vois dans beaucoup de tutoriels en pdf...
    glFrustum ne fait que construire une matrice. Le clipping est bien entendu géré par le hardware.

    En fait, je cherche un algo qui me permette de ne pas calculer les triangles cachés sans passer par les quadtree ni rien de si compliqué (c'est pour un exposé, alors si je me noie dans le compliqué...) : j'en élimine avec le back face culling, mais par exemple: je suis au pied d'une montagne, derrière se trouve une colline. En mode WireFrame, je vois que des triangles de la collines sont rendus, alors qu'au rendu final texture, ils sont invisibles, cachés par ceux de la montange OpenGL affichant de zfar à znear j'en conclu.
    Comparer les coordonnes ecran et tenant compte compte du z de chaque coin ou passer par un algo "painter" ?
    L'occlusion culling ce sera de toute façon compliqué. Voir la FAQ 3D à ce sujet.

  6. #6
    Membre confirmé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Points : 479
    Points
    479
    Par défaut
    ok, donc si le clipping est hardware, je n'ai pas à m'en soucier, donc ils en parlent dans les tutoriaux seulement pour être exhaustif.
    J'ai déjà lu les FAQ, mais les liens sur l'occlusion ne parlent que d'occlusion quand on a des arbres binaires, des quadtree, etc, il n'y a rien sur des idées d'algo. Je vais me le coder tout seul dans mon coin je crois bien
    ou bien j'ai loupé quelque chose sur l'occlusion query ?

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui, tu as loupé la Q/R qui en parle dans la FAQ :
    http://jeux.developpez.com/faq/3d/?p...LING_occlusion

    Tu devrais également jeter un oeil aux autres Q/R de cette page, j'ai l'impression que tu mélanges un peu tout.

  8. #8
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par LapinGarou
    ok, donc si le clipping est hardware, je n'ai pas à m'en soucier, donc ils en parlent dans les tutoriaux seulement pour être exhaustif.
    Attention à ce que disent certains tutoriaux, parfois ils confondent "clipping" et "frustum culling" ou autre algo
    - le "clipping" est géré en hardware par la carte mais intervient tardivement dans le pipeline
    - le "frustum culling" sert à déterminer des portions de polygones qui ne sont pas dans le frustum de visibilité pour ne pas les envoyer inutilement et ce n'est pas géré en hardware

    ps: on dit frustum, avec 1 seul R comme glFrustum
    http://en.wikipedia.org/wiki/Frustum
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  9. #9
    Membre expérimenté

    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
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par LapinGarou
    Pure C++ :
    Le bit shifting est il toujours d'actualité sous C++ ? Est il plus rapide de faire un shift qu'une division ? (genre division par 256 ou >>8) Est ce toujours d'actualité ou bien avec les processeurs d'aujourd'hui cela est devenu inutile, comme les fixed points vs float...
    Ben réponse de normand. Si tu dois sacrifier beaucoup de généralité pour tout rapporter à des puissances de deux, alors tu es probablement perdant.

    Combien de divisions tu fais par frame, est-ce que tu ne peux pas transformer tes divisions en multiplications ?
    Est-ce que tu travailles en float ou en integer ? Si tu travailles en float il vaut mieux diviser que de faire la conversion float->int->float.

    Un shift c'est rapide. Plus rapide qu'une division. Mais sans contexte cette information ne sert à rien..

    Citation Envoyé par LapinGarou
    OpenGL:
    Comment marche la fonction glFrustrum? Je veux dire, vaut'il mieux l'utiliser ou me programmer mon propre frustum ? Sera-ce plus rapide ? (et que dire de gluPerspective ?)
    Comme on dit, glFrustum et gluPerspective ça sert juste à mettre en place ta matrice de projection. Donc le faire toi-meme ça veut juste dire créer ta matrice à la main.. Rien de plus.

    Citation Envoyé par LapinGarou
    Quel algo vous me conseillieriez pour l'affichage de heightmap ? RAOM, geomipmapping, Quadtree... ou bien rien, ça passe très bien suivant le nombre de polygones...
    Tout dépend de tes besoins.. En général les méthodes semi statiques marchent bien avec les hardware actuels. Par semi statiques on parle des méthodes qui ne modifient pas tous les sommets à chaque frame.

    Pour les besoins avancés quelquechose comme les geometric clipmaps ?
    http://research.microsoft.com/~hoppe/#geomclipmap

    Citation Envoyé par LapinGarou
    J'ai trouvé un algo qui utilise les fragment shaders pour l'occlusion des parties invisibles, mais cela ne va t'il pas me pomper de la bande passante pour l'affichage du reste ?
    Vu le peu de détails que tu donnes, on peut difficilement deviner si cela va pomper de la bande passante ou pas

    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

  10. #10
    Membre confirmé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Points : 479
    Points
    479
    Par défaut
    Ok, vous confirmez ce que j'avais intuitivement compris à propos du Frustum.

    Pour ma question sur l'occlusion, j'ai trouvé du code sur codesampler ici :
    http://www.codesampler.com/oglsrc/og...cclusion_query
    Je précise j'ai une Nvidia 6200, pas ATI, et pour le moment je me concentre sur le code nv, pas un truc qui marche sur tous pc. (je verrai ça plus tard).

    Edit : J'ai pris un screenshot de ce qui m'embête dans mon programme : le rendu de triangles inutiles comme vous pouvez le voir. On grimpe une colline, mais les autres triangles derrières non éliminés pas le BFculling sont quand même affichés.

  11. #11
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par LapinGarou
    On grimpe une colline, mais les autres triangles derrières non éliminés pas le BFculling sont quand même affichés.
    Il y a l'utilisation d'un octree combiné à l'occlusion query qui peut t'aider dans ce cas
    fais une recherche dans la faq sur les octree
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  12. #12
    Membre confirmé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Points : 479
    Points
    479
    Par défaut
    Justement, j'aimerai savoir si il y a un truc plus simple, ou si je suis obligé de m'y mettre.

  13. #13
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Avec une heightmap, tu peux faire un truc de scioux pour gérer ton problème.

    Ce n’est pas le truc forcément super simple à mettre en place.

    En gros, c'est du traitement d'image de ta heightmap.
    Tu sais ou se trouve les sommets de ta heighmap. Tu sais ou est la caméra, l'angle de la caméra. Avec un "simple" calcul de projection 3D vers 2D ensuite tu peux calculer suivant la hauteur de chaque sommet si le sommet suivant serra ou non dans le champ de la caméra, cela va éliminer tous les sommets non utile à ta vue. Première problème, cela va enlever plus de sommets que nécessaire, car certaines arrête vont disparaître, donc il faut re-parcourir l’image pour afficher un rang de 1 sommet connexe à chaque sommet affichable. Deuxième problème… c’est du traitement d’image, donc c’est assez lourd, et donc tu ne peux pas le faire à chaque frame.

    Sinon Octree, sinon un ROAM, sinon regarde ce lien aussi http://www.vterrain.org/

  14. #14
    Membre confirmé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Points : 479
    Points
    479
    Par défaut
    Tu as décris ce à quoi je pensais, mais j'ai abandonné quand je me suis vraiment penché sur le problème : trouver tous les vertex qui sont dans le frustum (là déjà c'est galère, faut tenir compte du clipping pour ceux qui sont sur les bords), calculer leur projection, et comparer par rapport à l'arrête la plus haute, etc... le etc en fait, c'est parce que j'ai la fumée qui sort des oreilles, je vais perdre plus de temps à coder ça qu'à comprendre ROAM ou les quadtree.

Discussions similaires

  1. [WB11] questions en vrac
    Par Seb33300 dans le forum WebDev
    Réponses: 5
    Dernier message: 31/01/2008, 13h28
  2. Réponses: 2
    Dernier message: 18/04/2007, 11h55
  3. Petites questions en vrac d'un débutant.
    Par kriskikout dans le forum Langage
    Réponses: 6
    Dernier message: 08/06/2006, 14h54
  4. [VBA-E] Questions en Vrac...
    Par Pouic dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/02/2006, 13h50
  5. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 06h22

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