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 :

GLu_FILL affiche des points


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut GLu_FILL affiche des points
    Bonjour,

    l'OpenGL est trés nouveau pour moi et je n'arrive pas tout à fait à faire ce que je veux :

    1) Je voulais tracer une sphère via une quadrique de glu.h mais en activant le mode FILL, je n'ai que des points. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	glPushMatrix();
    	glColor3f(1.0,1.0,1.0);
    	quad=gluNewQuadric();
    	gluQuadricDrawStyle(quad,GLU_FILL);
    	gluQuadricNormals(quad, GLU_SMOOTH);
    	gluQuadricOrientation(quad, GLU_OUTSIDE);
    	gluSphere(quad,30.0,20,20);
    	glPopMatrix ();
    2) Je voudrais que vous me confirmiez que glPush/PopMatrix servent à isoler un objet pour lui faire subir des modifications (rotation, translation, scale...).


    Le code complet (avec de l'opengl) :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    /* initialisation */
    void realize(GtkWidget *widget, gpointer data)
    {
    	donnees *d=(donnees *) data;
    	GdkGLContext *glcontext=gtk_widget_get_gl_context(widget);
    	GdkGLDrawable *gldrawable=gtk_widget_get_gl_drawable(widget);
    	GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0},light_position[] = {1.0, 1.0, 1.0, 0.0};
     
    	if(!gdk_gl_drawable_gl_begin(gldrawable,glcontext))
    		return;
     
    	/* début openGL */
     
    	glClearColor(0.0,0.0,0.0,0.0);
    	glClearDepth (1.0);
    	glShadeModel(GL_FLAT);
     
    /*	glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse);
    	glLightfv (GL_LIGHT0, GL_POSITION, light_position);
    	glEnable (GL_LIGHTING);
    	glEnable (GL_LIGHT0);
    	glEnable (GL_DEPTH_TEST);*/
     
    	/* fin OpenGL */
    	gdk_gl_drawable_gl_end(gldrawable);
    }
     
    /* chgt de configuration (redimensionnement etc...) */
    gboolean configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
    {
    	donnees *d=(donnees *) data;
    	GdkGLContext *glcontext=gtk_widget_get_gl_context(widget);
    	GdkGLDrawable *gldrawable=gtk_widget_get_gl_drawable(widget);
    	GLfloat l=widget->allocation.width, h=widget->allocation.height;
     
    	if(!gdk_gl_drawable_gl_begin(gldrawable,glcontext))
    		return FALSE;
     
    	glViewport(0,0,(GLsizei) l,(GLsizei) h);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    	glEnable(GL_DEPTH_TEST);
     
    	gdk_gl_drawable_gl_end(gldrawable);
     
    	return TRUE;
    }
     
    /* "redessinage" de la scène OpenGL */
    gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
    {
    	donnees *d=(donnees *) data;
    	GdkGLContext *glcontext=gtk_widget_get_gl_context(widget);
    	GdkGLDrawable *gldrawable=gtk_widget_get_gl_drawable(widget);
    	GLUquadricObj *quad;
     
    	if(!gdk_gl_drawable_gl_begin(gldrawable,glcontext))
    		return FALSE;
     
    	glClear(GL_COLOR_BUFFER_BIT |  GL_DEPTH_BUFFER_BIT);
     
    	/* pour gérer seulement la sph  (push et pop) */
    	glPushMatrix();
    	glColor3f(1.0,1.0,1.0);
    	glTranslatef(30.0,-1.0,1.0);
    	quad=gluNewQuadric();
    	gluQuadricDrawStyle(quad,GLU_FILL);
    	gluQuadricNormals(quad, GLU_SMOOTH);
    	/* gluQuadricOrientation(quad, GLU_OUTSIDE); */
    	gluSphere(quad,10.0,10,10);
    	glPopMatrix ();
     
    	glPushMatrix(); 
    	glRotatef(d->spin,0.0, 0.0, 1.0);
    	glTranslatef(1.0,2.0,0.0);
    	glColor3f(1.0,0.0,1.0);
    	glRectf(-25.0,-25.0,25.0,25.0);
    	glPopMatrix ();
     
    	glPushMatrix(); 
    	glTranslatef(1.0,0.0,0.0);
    	glColor3f(1.0,1.0,0.0);
    	glRectf(-25.0,-25.0,25.0,25.0);
    	glPopMatrix ();
     
    	/* Gestion de(s) buffer(s) */
    	if(gdk_gl_drawable_is_double_buffered(gldrawable))
    		gdk_gl_drawable_swap_buffers(gldrawable);
    	else
    		glFlush();
     
    	gluDeleteQuadric(quad);
     
    	gdk_gl_drawable_gl_end(gldrawable);
     
    	return TRUE;
    }

  2. #2
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Plus simple .. pour avoir tout objet OpenGL en mode fil, mettre devant:
    glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);


    Oui glPush/PopMatrix servent à isoler un objet ou un groupe d'objets.

  3. #3
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    La fonction "glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);" est sympa et pratique mais j'ai toujours un problème :

    voici une capture qui vaudra mieux que de longs discours :http://www.rniamo-developping.prog.fr/gtkgl2.png

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

Discussions similaires

  1. Afficher des points sur une carte
    Par atta09 dans le forum Discussions diverses
    Réponses: 0
    Dernier message: 29/07/2013, 11h59
  2. [VTK] Afficher des points 2D
    Par takout dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 11/12/2012, 16h04
  3. [XL-2007] ne pas afficher des points 'vides' dans un graphique
    Par boboss123 dans le forum Excel
    Réponses: 6
    Dernier message: 24/07/2012, 16h08
  4. Réponses: 9
    Dernier message: 20/07/2012, 16h15
  5. [OCaml & LablGl] Afficher des points
    Par Rian83 dans le forum Caml
    Réponses: 3
    Dernier message: 14/12/2009, 01h14

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