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 :
#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.
Afficher la suite