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

GLUT Discussion :

Fonction gluLookAt de Opengl/Glut: problème d'affichage


Sujet :

GLUT

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Fonction gluLookAt de Opengl/Glut: problème d'affichage
    Bonjour.
    Je cherche simplement à afficher un polyhèdre dans une fenêtre.
    Pour une raison que je ne comprends pas, l'aspect de celui-ci dépend des valeurs données à la fonction gluLookAt(...). Ainsi, lorsque je veux afficher un cube et que je choisis des valeurs plus grandes que 1.0 pour la position de la caméra, la fenètre n'affiche rien, reste noire. Lorsque je mets des valeurs <1.0, il m'affiche mon cube mais celui-ci est tronqué, ou carrément buggé. Je tiens a préciser que mon cube est petit (~1.5 de côté), qu'il est centré en (0,0,0) tout comme le point visé par la caméra.
    Je ne suis qu'une débutante avec Opengl et Glut, j'ai sûrement fait des erreurs basiques...

    Voici une partie de mon code:

    Dans mon fichier principal:
    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
     
    #include <iostream>
    #include <GL/glut.h>
    #include "Vertex.h"
    #include "Facets.h"
    #include "Polytope.h"
     
    using namespace std;
     
     
    void dessine()
    {	
    	Polytope poly("cube3.ext","cube3.ine", "cube3.ead");
    	poly.order_vertex();
     
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();
    	gluLookAt(0.8,-0.8,-0.8,0,0,0,0,1,0);
    	poly.dessine();
    	glutSwapBuffers();
    }
     
    int main(int argc, char **argv)
     {
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
    	glutInitWindowPosition(100,100);
    	glutInitWindowSize(800,800);
    	glutCreateWindow("Polytopes");
    	glutDisplayFunc(dessine);
    	glutMainLoop();
    }
    Et dans les fonctions de la classe Polytope:
    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
     
    void Polytope::dessineface(Facets f)
    {
    	vector<Vertex> adj;
    	int n=f.adj_vertices.size();
    	for(int i=0;i<n;i++)
    	{
    		adj.push_back(find_vertex(f.adj_vertices[i]));
    	}
     
     
    	glBegin(GL_POLYGON);
     
    	for(int i=0;i<n;i++)
    	{
    		glVertex3f(adj[i].x/3.,adj[i].y/3.,adj[i].z/3.);
    	}
     
    	glEnd(); glFlush();
    }
     
     
    void Polytope::dessine()
    {
    	glClear(GL_COLOR_BUFFER_BIT);
    	for(int i=0;i<nb_facets;i++)
    	{
    		glColor4f(facets[i].a1/10.0 +0.5,facets[i].a2/10.0+0.5,facets[i].a3/10.0+0.5,1.0);
    		dessineface(facets[i]);
    	}
    	glFlush();
    }
    Ne faîtes pas trop attention à mon implémentation des classes, les fonctions et les passages ont été vérifiés par ailleurs.

    Voilà, en espérant que j'ai été assez claire...

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Salut,

    généralement pour des petits programmes comme ça, on fait une petite fonction init() qui met en place le viewport et la caméra. Appelle cette fonction juste avant glutMainLoop().

    Voilà un exemple de fonction init :

    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
    void myInit() {
    glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); // mode d'affichage des polygones
    // GL_FRONT_AND_BACK = affiche les 2 cotés
    // GL_FILL = remplit les polygones
    glShadeModel(GL_SMOOTH); // modèle d'illumination GL_FLAT
    glEnable(GL_DEPTH_TEST); // activation du Z-Buffer
    glDepthFunc(GL_LEQUAL); // gestion du Z-Buffer : GL_LESS GL_LEQUAL GL_ALWAYS
    // G L_EQUAL GL_GREATER GL_NOTEQUAL GL_GEQUAL
    glEnable(GL_COLOR_MATERIAL); // active la coloration des objets
    glClearColor(0.0f,0.0f,0.0f,1.0f); // couleur du fond de la scène
     
    // init de la matrice de projection
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); // init à la matrice identité
    gluPerspective(45.0f, // angle d'ouverture de la caméra
    width/height, // ratio de la fenêtre
    0.1f,1000.0f); // distance min et max de la scène
    // init de la matrice de vue
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity(); // init à la matrice identité
    gluLookAt(0.0f, 0.0f, 0.0f, // position oeil
    0.0f,0.0f,1.0f, // point regardé
    0.0f,1.0f,0.0f); // vecteur haut
    }
    Je pense que ce que tu as oublié c'est la deuxième partie. Regarde là http://helios.univ-reims.fr/Labos/LE...enGL/td02.html pour comprendre les perspectives possibles.

    Si ton Cube fait 1.5 de coté, place ta caméra à 4. ou plus de distance.

    Peut-être devrais tu déplacer ce sujet dans le forum consacré à OpenGL

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Il m'a suffit de reprendre ta fonction myInit() et ça a marché!
    Merci beaucoup!

    (Désolée pour le post au mauvais endroit, merci à celui qui l'a déplacé.)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/11/2012, 10h51
  2. problème d'affichage des scènes OpenGL
    Par franc82 dans le forum OpenGL
    Réponses: 4
    Dernier message: 02/01/2007, 10h11
  3. Problème d'affichage en fonction de la situation
    Par HwRZxLc4 dans le forum Langage
    Réponses: 4
    Dernier message: 14/08/2006, 21h07
  4. Réponses: 3
    Dernier message: 10/01/2006, 14h01
  5. [Cygwin et OpenGL] Problème d'affichage
    Par CandS dans le forum Autres langages
    Réponses: 2
    Dernier message: 28/04/2005, 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