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 :

Dessiner dans le Front Buffer ? Afficher l'aperçu d'un segment sous la souris


Sujet :

OpenGL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Dessiner dans le Front Buffer ? Afficher l'aperçu d'un segment sous la souris
    Bonjour à tous,

    Je travaille actuellement sur un modeleur 3D comportant une partie permettant de réaliser des brouillons.

    Mon problème est le suivant :
    Je souhaiterais afficher l'aperçu (une sorte de fantome) d'un segment ou toute autre élément géométrique, lors de sa création.

    Pour celà j'ai penser à plusieurs solutions (tout n'est pas forcément logique... mais là je suis vraiment perdu) :

    Ecrire dans le front buffer :

    swapbuffer
    création des vertex, polygon, etc.
    swapbuffer.

    Celà affiche quelquechose mais qui n'est pas soumis à mes mouvements de caméra, et les opération de swap ralentissent bcp le programme.


    En fait le but est de pouvoir décrire des éléments géométrique de facon asynchrone à la fonction Display par exemple (dans glut).

    On décrit une scène - on lui affecte des rotations de vue - on l'affiche
    Puis dans d'autres fonctions (celles qui créer les fantomes) on souhaiterait dessiner directement des objets 3D à l'écran...
    En retard donc,
    Je ne sais pas vraiment comment faire, ce comportement du logiciel est hérité de son ancienne méthode d'affichage en GDI, qui, ne gérant pas le doublebuffer, dessine un peu nimporte quand.


    Je fais surement fausse route, pour l'instant j'aimerais au moins des conseils ou une orientation à avoir pour créer l'aperçu d'un segment lorsqu'on le créé.
    (1clic puis mousemotion -> segment fantome entre 1er point et souris)

    Merci,
    Quentin

  2. #2
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    1clic puis mousemotion -> segment fantome entre 1er point et souris
    Pour ça, il suffit d'enregistrer les coordonnées de la souris au moment du clic, et les coordonnées de la souris au moment du raffraichissement, et de dessiner ta ligne entre la paire de vertex.

    Après à toi de voir comment tu veux faire correspondre (2D fenêtre -> 3D scène)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Oui, c'est ce qu'il se passe actuellement mais le truc c'est que dans la pratique ca se déroule de la sorte :

    cycle display :
    Clear écran
    Manipulateur de distance, rotation, zoom, etc.
    Création de la forme géométrique
    Flush
    Swap buffer


    Et en parrallèle et répondant aux évenements par exemple :

    Fonction de gestion souris
    création d'un segment temporaire
    affichage de la forme géométrique

    Ce moteur fonctionnait à la base en GDI, avec celui-ci pas de problème on peut dessiner après coup, suffit de se servir de la matrice de vue et on ajoute un segment en temps réel sans tout réafficher.

    Mais le problème c'est que ca me fait ajouter un segment de manière asynchrone au cycle display. On ne peut pas ajouter un segment à une vue une fois le swapbuffer effectué ?


    Le truc c'est que j'ai des centaines d'appel à 2 fonctions qui affiche directement à l'écran (sans redessinage total) dans le programme que je porte. Peut-on dessiner ainsi en OpenGL ?

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Si tu redessines directement dans le color buffer visible (en n'utilisant pas de double buffering par exemple), c'est possible.

    Cependant une fois que tu fais ton clear opengl, il faut tout redessiner...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci, justement c'est ce que je voulais dire en demandant comment écrire dans le front buffer.

    Mais comment on fait ca ? on ne choisit pas le buffer ou on dessine quand on décrit des formes.

  6. #6
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Si tu veux juste dessiner dans le front buffer après un swap, pour ajouter des choses de temps en temps, tu peux utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glDrawBuffer(GL_FRONT);
    Avec GL_BACK, tu redessinnes dans le tampon arrière. L'affichage sera plus propre : double buffering.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Ah !

    Donc avec cette fonction je peux dessiner où je veux,


    Va surement falloir rajouter des actions de zoom et de rotation avant d'écrire dedans... uhmmm je vais tester ca

    Merci !

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/10/2009, 14h12
  2. Dessiner dans un buffer
    Par goperto dans le forum OpenGL
    Réponses: 1
    Dernier message: 02/04/2007, 02h26
  3. Dessiner dans un Jpanel et l'afficher dans un JFrame
    Par Sourrisseau dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 26/02/2007, 22h41
  4. Dessiner dans un buffer
    Par @Dave dans le forum OpenGL
    Réponses: 4
    Dernier message: 16/03/2006, 18h54
  5. affichage dans le front buffers ne marche pas!
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/08/2003, 19h14

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