begin process at 2012 05 29 05:49:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

OpenGL

 > 

Faire défiler un objet openGl


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Faire défiler un objet openGl

vendredi 30 octobre 2009 à 19:06:13 | Faire défiler un objet openGl

ygoth

Bonjour à tous :)

J'ai un petit soucis en openGl j'essaye de refaire un "guitare hero" en C++

J'en suis pour l'instant qu'à la partit graphique.

Et mon problème se pose au moment ou je veux faire défiler une de mes note. je pense que je m'y prend mal car je n'arrive pas a comprendre le fonctionnement des translation... je n'arrive pas à translater qu'un objet à la fois...

Bref du coup je recrée mon pavé à des positions différentes.
Mais au moment ou je veux le faire automatiquement avec un for() sois le for est trop rapide et je voie le pavé sur toute la longueur sois je rajoute un Sleep(5) et la le programme plante au démarrage...

ça seras peux être plus parlant avec le code :
Code C/C++ :
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <cstdlib>
#include <windows.h>

SHORT Mask = 32768;
double TRose = 8, TBleu = 8, TJaune = 8, TRouge = 8, TVert = 8;
int x =0;
//void Draw();
void Repere();
void Manche();
void defiler();
void Quadz ( double posAX,double posAY,double posAZ,double Largeur,double Longeur,double Hauteur, bool ColorR, bool ColorG, bool ColorB); //couleur = 0||1



int main(int argc, char *argv[])
{
    SDL_Event event;

    SDL_Init(SDL_INIT_VIDEO);
    atexit(SDL_Quit);
    SDL_WM_SetCaption("SDL GL Application", NULL);
    SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective(70,(double)800/600,1,1000);
    	glEnable(GL_DEPTH_TEST);



    //Draw();

    for (;;)
    {


    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity( );

    gluLookAt(0.5,2,-1.2, 0.5,0.2,2.5, 0, 0, 1);
        SDL_PollEvent(&event);



        if (GetKeyState('G') & Mask)// incrémentation en Z de la case verte 
                TVert = TVert -0.01;
        if (GetKeyState('T') & Mask)
                TVert = TVert +0.01;



         Repere();
         Manche();
         defiler();
         Quadz (0, 0.2, TVert, 0.2, 0.0625, 0.0500, 0, 1, 0);// déplacement manuel de la case verte 

      // Draw();

           glFlush();
    SDL_GL_SwapBuffers();
    }

    return 0;
}




void Quadz ( double posAX,double posAY,double posAZ,double Largeur,double Longeur,double Hauteur, bool ColorR, bool ColorG, bool ColorB) //couleur = 0||1
{
    GLubyte RDESSUS=0, RDEVANT=0, RGAUCHE=0, RDROITE=0, RDESSOUS=0, RDERRIERE=0, GDESSUS=0, GDEVANT=0, GGAUCHE=0, GDROITE=0, GDESSOUS=0, GDERRIERE=0, BDESSUS=0, BDEVANT=0, BGAUCHE=0, BDROITE=0, BDESSOUS=0, BDERRIERE=0;


    if (ColorR==1)
    {
        RDESSUS= 255;
        RDEVANT= 190;
        RGAUCHE= 130;
        RDROITE= 130;
        RDESSOUS= 80;
        RDERRIERE= 80;
    }

    if (ColorG==1)
    {
        GDESSUS= 255;
        GDEVANT= 190;
        GGAUCHE= 130;
        GDROITE= 130;
        GDESSOUS= 80;
        GDERRIERE= 80;
    }

    if (ColorB==1)
    {
        BDESSUS= 255;
        BDEVANT= 190;
        BGAUCHE= 130;
        BDROITE= 130;
        BDESSOUS= 80;
        BDERRIERE= 80;
    }







    glBegin(GL_QUADS);

    glColor3ub(RDEVANT,GDEVANT,BDEVANT); //face DEVANT
     glVertex3d(posAX,posAY,posAZ);   //A
     glVertex3d(posAX+Largeur,posAY,posAZ);   //B
     glVertex3d(posAX+Largeur,posAY+Hauteur,posAZ); //C
     glVertex3d(posAX,posAY+Hauteur,posAZ); //D

    glColor3ub(RDROITE,GDROITE,BDROITE); //face DROITE
     glVertex3d(posAX+Largeur,posAY,posAZ);   //B
     glVertex3d(posAX+Largeur,posAY,posAZ+Longeur);   //F
     glVertex3d(posAX+Largeur,posAY+Hauteur,posAZ+Longeur);  //G
     glVertex3d(posAX+Largeur,posAY+Hauteur,posAZ); //C

    glColor3ub(RDESSOUS,GDESSOUS,BDESSOUS); //face DESSOUS
     glVertex3d(posAX,posAY,posAZ);   //A
     glVertex3d(posAX+Largeur,posAY,posAZ);   //B
     glVertex3d(posAX+Largeur,posAY,posAZ+Longeur);   //F
     glVertex3d(posAX,posAY,posAZ+Longeur);    //E

    glColor3ub(RGAUCHE,GGAUCHE,BGAUCHE); //face GAUCHE
     glVertex3d(posAX,posAY,posAZ);   //A
     glVertex3d(posAX,posAY,posAZ+Longeur);    //E
     glVertex3d(posAX,posAY+Hauteur,posAZ+Longeur);   //H
     glVertex3d(posAX,posAY+Hauteur,posAZ); //D

    glColor3ub(RDERRIERE,GDERRIERE,BDERRIERE); //face DERRIERE
     glVertex3d(posAX,posAY,posAZ+Longeur);    //E
     glVertex3d(posAX+Largeur,posAY,posAZ+Longeur);   //F
     glVertex3d(posAX+Largeur,posAY+Hauteur,posAZ+Longeur);  //G
     glVertex3d(posAX,posAY+Hauteur,posAZ+Longeur);   //H

    glColor3ub(RDESSUS, GDESSUS, BDESSUS); //face DESSUS
     glVertex3d(posAX,posAY+Hauteur,posAZ); //D
     glVertex3d(posAX+Largeur,posAY+Hauteur,posAZ); //C
     glVertex3d(posAX+Largeur,posAY+Hauteur,posAZ+Longeur);  //G
     glVertex3d(posAX,posAY+Hauteur,posAZ+Longeur);   //H
      glEnd();

}



void Repere()
{
    glBegin(GL_LINES);

         glColor3ub(0,255,0);
            glVertex3d(0,0,0); //X
            glVertex3d(1,0,0);
             glEnd();

    glBegin(GL_LINES);
         glColor3ub(0,0,255);
            glVertex3d(0,0,0); //Y
            glVertex3d(0,1,0);
             glEnd();

    glBegin(GL_LINES);
        glColor3ub(255,0,0);
            glVertex3d(0,0,0); //Z
            glVertex3d(0,0,1);
             glEnd();
}



void Manche()
{
     glBegin(GL_QUADS);

    glColor3ub(125,60,0); //face DEVANT
     glVertex3d(0,0,0);   //A
     glVertex3d(1,0,0);   //B
     glVertex3d(1,0.2,0); //C
     glVertex3d(0,0.2,0); //D

    glColor3ub(110,60,0); //face DROITE
     glVertex3d(1,0,0);   //B
     glVertex3d(1,0,8);   //F
     glVertex3d(1,0.2,8);  //G
     glVertex3d(1,0.2,0); //C

    glColor3ub(70,30,0); //face DESSOUS
     glVertex3d(0,0,0);   //A
     glVertex3d(1,0,0);   //B
     glVertex3d(1,0,8);   //F
     glVertex3d(0,0,8);    //E

    glColor3ub(110,60,0); //face GAUCHE
     glVertex3d(0,0,0);   //A
     glVertex3d(0,0,8);    //E
     glVertex3d(0,0.2,8);   //H
     glVertex3d(0,0.2,0); //D

    glColor3ub(70,30,0); //face DERIERE
     glVertex3d(0,0,8);    //E
     glVertex3d(1,0,8);   //F
     glVertex3d(1,0.2,8);  //G
     glVertex3d(0,0.2,8);   //H

    glColor3ub(170,80,0); //face DESSUS
     glVertex3d(0,0.2,0); //D
     glVertex3d(1,0.2,0); //C
    glColor3ub(255,180,110);
     glVertex3d(1,0.2,8);  //G
     glVertex3d(0,0.2,8);   //H
      glEnd();


     for (double i = 0; i<1.1; i=i+0.2)
     {
         glBegin(GL_LINES);
        glColor3ub(180,180,180);
         glVertex3d(i,0.201,0);
         glVertex3d(i,0.201,8);
        glEnd();
     }

     for (double i = 0; i<8.1; i=i+0.5)
     {
         glBegin(GL_LINES);
        glColor3ub(180,180,180);
         glVertex3d(0,0.201,i);
         glVertex3d(1,0.201,i);
        glEnd();
     }

}


void defiler()
{

    for (double Tz=8;Tz>0;Tz=Tz-0.01)
    {

      Quadz (0.8, 0.2, Tz, 0.2, 0.0625, 0.0500, 1, 0, 1);

      //Sleep(5);

    }

}




Le problème arrive dans mon void defiler() tout à la fin


Alors voila je suis un peux tout perdu et m'en remet donc a vous :)


Je vous remercient d'avance.

à bientôt.
mercredi 17 février 2010 à 13:31:15 | Re : Faire défiler un objet openGl

shorzy



Tu as Trouvé depuis le Temps ???

1) Une Translation ne S'Effectue pas n'importe Quand/Comment ...
2) Essaye des Timer.

++


Cette discussion est classée dans : glvertex3d, posax, posay, posaz, glcolor3ub


Répondre à ce message

Sujets en rapport avec ce message

labyrinthe en 3D sytle ecran veille windows [ par gastoudou ] Bonjour à tous,Et oui encore moi pour une question, que dis-je, une mission pour une âme charitable.Je suis en train de faire un labyrinthe en 3D styl J'ai besoins d'aide please ! [ par mondrone ] #include #include SDL_Surface *screen = NULL; void demarre_opengl(); void creer_fenetre_opengl(); void init_opengl(); void stop_opengl(); void tou Probleme de Texture avec SDL image [ par Seboo ] Bonjour,J'ai developper un programme sous GLUT puis pur la gestion des textures je m'y suis lancé avec SDL image. Le probleme est que quand je charge [OpenGL] Diriger mon cube a gauche et a droite et sans rotation (pour l'instant) [ par FPSQuentin ] Bonjour a tous. J'ai réussi a faire un cube en 3D et j'arrive à faire avancer et reculer mon cube mais se que je n'arrive pas à faire, c'est que l'on appel fonction en asm [ par LlufRuS ] Bonjour à tous,je souhaite appeler une fonction provenant d'une librairie dynamique en lui passant directement mes arguments sur la pile (malheureusem Rotation de forme [ par boubz013 ] Bonsoir, je suis débutant et fasciné en opengl, mais je m'oppose à un probléme, en faite j'essaie de faire tourner mes forme geometrique à l'aide des


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales