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 :

vues d'un cube en opengl [OpenGL 1.x]


Sujet :

OpenGL

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 68
    Points : 47
    Points
    47
    Par défaut vues d'un cube en opengl
    bonjour;
    dans un programme opengl j'ai tracé un cube.lorsque je saisie une lettre le programme affiche une vue du cube, calcule et enregistre (dans un fichier texte à l'aide de glreadpixel()) le nombre des pixels des couleurs rouge,vert,et bleu.(vue= placement de la camera à une position donnée). ma question est: est-il possible de faire cette tâche directement à l'aide d'une boucle sans passer par la saisi de clavier ?
    le code que j'utilise est le suivant:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <gl/glut.h>
     
    typedef struct point{
    float x; float y;float z;
    };point pl;
     
    point zero={-0.5, -0.5, 0.5}, un={0.5, -0.5, 0.5},deux={-0.5, 0.5 ,0.5},
    	 trois={0.5, 0.5, 0.5},quatre={-0.5, 0.5 ,-0.5},cinq={0.5, 0.5, -0.5},six={-0.5, -0.5 ,-0.5},sept={0.5, -0.5, -0.5};
    // variables du mouvement
    static int scaling = 0;
    static int translating = 0;
    static int rotating = 0;
    static float scale = 1.0;
    static float center[3] = { 0.0, 0.0, 0.0 };
    static float rotation[3] = { 0.0, 0.0, 0.0 };
    static float translation[3] = { 0.0, 0.0, -4.0 };
     
    //variables de la camera
    float ex=1,ey=1,ez=1;
     
     
    void face(point a,point b,point c,point d){ 
    glBegin(GL_POLYGON);
        glVertex3f(a.x,a.y,a.z);
    	glVertex3f(b.x,b.y,b.z);
        glVertex3f(c.x,c.y,c.z);
        glVertex3f(d.x,d.y,d.z);
    glEnd();
    }
    void drawCube(){ 
    	// Setup viewing transformation
      glLoadIdentity(); glScalef(scale, scale, scale); glTranslatef(translation[0], translation[1], 0.0);
      // Set projection transformation
      glMatrixMode(GL_PROJECTION); glLoadIdentity(); 
      gluPerspective(45.0, 1, 0.1, 100.0); 
      // Set camera transformation
      glMatrixMode(GL_MODELVIEW);glLoadIdentity();
      glTranslatef(translation[0], translation[1], translation[2]);
      glScalef(scale, scale, scale);glRotatef(rotation[0], 1.0, 0.0, 0.0);
      glRotatef(rotation[1], 0.0, 1.0, 0.0);glRotatef(rotation[2], 0.0, 0.0, 1.0);
      glTranslatef(-center[0], -center[1], -center[2]);
    gluLookAt((GLfloat)ex,(GLfloat)ey,(GLfloat)ez,0,0,0,0,1,0);  
     
     
    	glPushMatrix();
    	glClear(GL_COLOR_BUFFER_BIT);
    	glColor3f(1.0,.0,.0);face(zero,un,sept,six);
    	glColor3f(.0,1.0,.0);face(sept,cinq,quatre,six);
    	glColor3f(.0,.0,1.0);face(cinq,quatre,deux,trois);
    	glColor3f(1.0,1.0,1.0);face(deux,trois,un,zero);
    	glColor3f(1.0,1.0,.0);face(un,sept,cinq,trois);
    	glColor3f(.0,1.0,1.0);face(zero,six,quatre,deux); 
    	glPopMatrix();
    	glFlush();
    	/********************
            traitement de glrearpixel();
            ********************/
    }
    void init(){glClearColor(.0,.0,.0,.0);}
     
    void clavier(unsigned char k,int x,int y){
    	switch(k){
    	case 'q':{ exit(0);break;}
    	case 'a': {ex =7;glutPostRedisplay();break;}
    	case 'z': {ex =-7;glutPostRedisplay();break;}
    	case 'e': {ey =5;glutPostRedisplay();break;}
    	case 'r': {ey =-5;glutPostRedisplay();break;}
    	case 't': {ez =6;glutPostRedisplay();break;}
    	case 'y': {ez =-6;glutPostRedisplay();break;}
    	//case 27: exit(0);break;
    	}
    }
    void main(int argc,char **argv){
    	glutInit(&argc,argv);
    	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    	glutInitWindowSize(450,450);
    	glutInitWindowPosition(300,100);
    	glutCreateWindow("azer");
    	init(); 
    	glutDisplayFunc(drawCube);
    	glutKeyboardFunc(clavier);
    	glutMainLoop();
    }
    cordialement.

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    oui il suffit que tu modifies ta camera dans drawCube(), un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void drawCube(){
        if(ex == 1)
            ex =7;
        else if(ex == 7)
            ex =-7;
        else if(ex == -7)
            //etc.
    }
    Tu pourrais aussi passer par un tableau de valeurs et y accéder par un pointeur ou index incrémenté à chaque loop.
    Vive les roues en pierre

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Je vais faire mon casse-pied, mais il faut arrêter d'apprendre de l'OpenGL déprécié, c'est une perte de temps pour vous d'apprendre ça. Il faut apprendre au moins OpenGL 2 (qui date quand même de 2004... c'est pas comme si c'était une nouvelle technologie)

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 68
    Points : 47
    Points
    47
    Par défaut
    à gbdivers vous avez raison, mais j'ai pas le choix ! la base avec laquelle je travail est ancienne !!

    à Djakisback: j'ai essayé votre idée mais ça marche pas ! peut être j'ai pas bien fais. heureusement j'ai trouvé la solution avec la fonction "idle" comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    static void idle(void)
    { 
        ex +=2;cp=1; 
        if (ex > 6) { 
            ex=0;ey +=2;cp=3; 
            if (ey > 6) {
                ey=0;ez +=2;cp=5; 
                if (ez > 6) {
                    fprintf(f,"%s\t",monObjet);fprintf(f,"\n");exit(0) ;
                }
            }
        }
        glutPostRedisplay();
    }
    merci à tous

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

Discussions similaires

  1. [OpenGL 1.x] affichage d'un cube avec opengl
    Par emykev22 dans le forum OpenGL
    Réponses: 3
    Dernier message: 02/09/2014, 19h54
  2. Un développeur donne son point de vue sur la conception d'OpenGL
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 24
    Dernier message: 13/06/2014, 19h54
  3. Problème de vue d'un cube
    Par AuraHxC dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/12/2009, 14h46
  4. Réponses: 1
    Dernier message: 26/06/2005, 17h32

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