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 :

Plusieurs vues pour le même objet


Sujet :

OpenGL

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Plusieurs vues pour le même objet
    Bonsoir,

    J'ai un programme tout simple qui affiche un cube à l'écran (le minimum quoi). Maintenant que je maîtrise un peu mieux les transformations, j'aimerai afficher un objet sous N vues différentes dans la même fenêtre. Merci d'avance pour vos réponses.


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  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
    Une façon de faire est la suivante : à chaque vue tu associes un viewport et une matrice de transformation ; il n'y a ensuite plus qu'à rendre ton objet autant de fois qu'il y a de vues avec à chaque fois le viewport et la matrice associés.

  3. #3
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut
    La fonction glViewPort te permet de dessiner dans une zone delimitée de l'écran. Par exemple si tu es en 800x600 et N=4 vues tu fait un truc du style:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    void affichage()
    {
     
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         glLoadIdentity();
     
         glViewPort(0,0,400,300);
    // maintenant tu dessine dans la partie supérieure gauche de l'écran.
     
         glPushMatrix(); // tu sauvegarde ta matrice de vue actuelle
         placeCamera(); // tu place ta cam avec glTranslatef+glRotatef ou avec gluLookAt() ou gluOrtho()
     
         dessineObjets(); //tu dessine tes objets
         glPopMatrix(); // tu recharge ta matrice de vue
     
         glViewPort(400,0,400,300);
    // maintenant tu dessine dans la partie supérieure droite de l'écran.
     
         glPushMatrix();
         placeCamera();
         dessineObjets();
         glPopMatrix();
     
         glViewPort(0,300,400,300);
    // maintenant tu dessine dans la partie inférieure gauche de l'écran.
     
         glPushMatrix();
         placeCamera();
         dessineObjets();
         glPopMatrix();
     
         glViewPort(400,300,400,300);
    // maintenant tu dessine dans la partie inférieure droite de l'écran.
     
         glPushMatrix();
         placeCamera();
         dessineObjets(); 
         glPopMatrix();
     
     
         SDL_GL_SwapBuffers();  // avec SDL
         glutSwapBuffers(); // avec glut
     
    }
    aprés si tu veut N vues, tu t'arrange pour découper l'écran en N parties +/- egales (N=3 ça doit pas être super )
    Bonne chance et a+

    [EDIT]
    bien sur te fonction placeCamera() doit prendre des arguments différents à chaque fois, selon ou tu veut la mettre
    [/EDIT]

  4. #4
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Merci déjà à vous deux pour vos réponses. Juste un truc : j'ai l'habitude de faire une fonction display avec mon cube basique et une autre fonction reshape qui fait les transfo., ca donne ca :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    void init()
    {
    	glClearColor(0,0,0,0);
    	glShadeModel(GL_SMOOTH);
    	glEnable(GL_DEPTH_TEST);
    }
     
    void display()
    {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glutSolidCube(1);
    	glutSwapBuffers();
    }
     
    void reshape(int w,int h)
    {
    	glViewport(0,0,(GLsizei)w,(GLsizei)h);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluPerspective(65,(GLfloat)w/(GLfloat)h,1.5,20);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    }
     
    int main(int argc, char ** argv)
    {
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    	glutInitWindowSize(500,500);
    	glutInitWindowPosition(100,100);
    	glutCreateWindow(argv[0]);
    	init();
    	glutDisplayFunc(display);
    	glutReshapeFunc(reshape);
    	glutMainLoop();
    	return 0;
    }
    Comment je pourrai faire pour gérer aussi le redimenssionnement sans que tout ca sans pas trop compliqué ni redondant en code ? Merci.

    Nico.


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir ]
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    Tu peux trouver un tutorial sur un modeleur en français.

    http://glinfrench.fr.st/

Discussions similaires

  1. Plusieurs vues sur un même fichier
    Par minicat dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/05/2014, 21h53
  2. Comment fusionner plusieurs callback pour un même objet graphique
    Par biquet dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 19/04/2007, 10h39
  3. Plusieurs valeurs pour un même champ
    Par will89 dans le forum Requêtes
    Réponses: 32
    Dernier message: 14/06/2006, 10h06
  4. [MFC] Plusieurs vues sur le même CTreeCtrl
    Par Denn's dans le forum MFC
    Réponses: 4
    Dernier message: 17/04/2006, 19h12
  5. Réponses: 8
    Dernier message: 05/12/2005, 14h43

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