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 :

Selection Buffer - Qu'est-ce qu'un Hit Record?


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut Selection Buffer - Qu'est-ce qu'un Hit Record?
    Bonjour,

    J'ai lu les 4 sources suivantes pour comprendre comment le tampon de sélection (Selection Buffer) était agencé :
    http://www.opengl.org/sdk/docs/man/x...lectBuffer.xml
    http://www.unknownroad.com/rtfm/grap...selection.html
    http://www.glprogramming.com/red/chapter13.html
    http://www.lighthouse3d.com/opengl/p...php?openglway3

    1) Ce que j'ai cru avoir compris au début

    Le tampon de sélection (Selection Buffer) est un tableau d'entiers non signés. Appelons-le SelecBuff pour la suite.
    Alors lorsque l'on quitte le mode de sélection (GL_SELECT) pour repasser en mode de rendu (GL_RENDER) par exemple, le tableau SelecBuff ressemble à ceci :

    SelecBuff[0] contient le nombre n de primitives intersectant le volume d'affichage, en gros le nombre d'éléments auquel j'ai donné un nom "qui se trouvent sous ma souris".
    SelecBuff[1] contient la coordonnés par rapport à l'axe des z de l'élément de profondeur maximale;
    SelecBuff[2] contient la coordonnés par rapport à l'axe des z de l'élément de profondeur minimale;
    SelecBuff[3] nom1
    SelecBuff[4] nom2
    ...
    SelecBuff[n] nomn

    où nom* sont les numéros/noms associé aux n primitives qui intersectent le volume d'affichage.

    Je pensais alors qu'il suffisait de récupérer nom1 pour savoir quel élément est sous ma souris (avec un peu de chance c'est le seul).

    2) Seulement voilà ce que je viens de comprendre

    La structure décrite ci-dessous est un "Hit Record"... et tout ce que j'ai dit plus haut est faux! Quelqu'un pourrait-il m'expliquer l'exemple de Selection Buffer donné ici que je recopie ci-dessous :

    0 No names have been stored for the first hit
    4.2822e+009 Minimum depth for first hit
    4.28436e+009 Maximum depth for first hit

    1 Number of names for the second hit
    4.2732e+009 Minimum depth for second hit
    4.27334e+009 Maximum depth for second hit
    6 A single name for the second hit

    2 Number of names for the third hit
    4.27138e+009 Minimum depth for third hit
    4.27155e+009 Maximum depth for third hit
    2 First name for third hit
    5 Second name for third hit
    Je pense que ce serait le moyen le plus simple pour que je comprenne!
    Merci d'avance pour votre aide,

    Rémi.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut J'ai compris!
    En fait, je n'avais pas bien saisi la différence entre glPopName() et glLoadName()!
    Je pensais que chaque fois qu'un primitive à laquelle j'avais donné un nom avec glLoadName() était dessinée dans le volume d'affichage, son nom était ajouté en haut de la pile des noms (namestack).
    En fait glLoadName() change la valeur en haut de la pile. L'utilisation de glPushName() et glPopName() permettant de créer en quelque sorte des hiérarchies de noms.

    Voilà donc le pseudo-code qui aurait pu aboutir à l'exemple que j'ai donné dans mon dernier post, en supposant que tous les objets sauf l'objet 1 intersectent le volume d'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    GLint hits;
    GLuint selectBuf[BUFSIZE];
    glSelectBuffer (BUFSIZE, selectBuf);
     
    glRenderMode (GL_SELECT);
    glInitNames();
    dessin objet 1;
    dessin objet 2;
     
    glPushName(6);
    dessin objet 3;
     
    glLoadName(2);
    glPushName(5);
    dessin objet 4;
     
    hits = glRenderMode (GL_RENDER);
    Bref j'aurais du tourner sept fois la langue dans ma bouche avant de poster quelque chose... Surtout qu'il est difficile de décrire ce que l'on ne comprend pas (mon dernier post est il est vrai difficilement compréhensible )!

    Bonne journée à tous,

    Rémi.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/04/2009, 16h43
  2. Réponses: 3
    Dernier message: 22/02/2009, 13h12
  3. Réponses: 0
    Dernier message: 18/11/2008, 21h25
  4. Mon Buffer cache hit ratio est en dent de scie !
    Par PandaConstantin01 dans le forum Administration
    Réponses: 11
    Dernier message: 20/09/2007, 10h31

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