OpenGL avec GLUT please help

Résolu
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012 - 7 juil. 2005 à 12:41
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012 - 9 juil. 2005 à 10:56
Je viens d'essayer de recopier tel quel un tutorial qu'on m'avait donné sur le net. J'arrive à obtenir ce que je suis censé avoir, pendant environ 1/10 seconde. après le dessin semble se barrer de l'écran en direction du coin en haut à droite à vitesse V avant de disparâitre totalement alors que dans le tuto il n'y a pas d'instruction de mouvement.

Je ne comprend pas....


Pour ceux qui auraient le temps de se pencher sur la question, voila le code, que d'ailleurs certains d'entre vous doivent connâitre puisqu'il est tiré du tuto de Antoine Bouthors. Peut ^tre sont-ce uniquement mes dll qui merdent? Mais je les ai dl dans un pack sur www.orion3d.fr.st donc je pense qu'elle devaient marcher chez le posteur.

merci d'avance :




#include<gl/glut.h>

int WindowName;
double a=0;

void Reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(
45,
(float)width/(float)height,
0,
100
); //Pour les explications, lire le tutorial sur OGL et win
glMatrixMode(GL_MODELVIEW); //Optionnel
}

void InitGL(void)
{
}


void Draw()
{




glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
gluLookAt(5,5,5,0,0,0,0,1,0);
glBegin(GL_QUADS);

glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
//1 face

glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//2 faces

glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
//3 faces

glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//4 faces

glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
//5 faces

glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
//6 faces
glEnd(); //"Cette fois, j'le sens bien..."

glutSwapBuffers();
//glutSwapBuffers(); pour glut
glutPostRedisplay(); //Uniquement pour GLUT
}



int main( int argc, char *argv[ ], char *envp[ ] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640,480); //Optionnel
WindowName = glutCreateWindow("Ma première fenêtre OpenGL !");
glutFullScreen(); //Optionnel

glutReshapeFunc(Reshape);
glutDisplayFunc(Draw);
InitGL();

glutMainLoop();

return 0;

}

15 réponses

KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
9 juil. 2005 à 09:49
J'avais pas fais gaffe : ne mets jamais 0 au "near" dans la matrice de projection....

J'ai rajouté une petite animation....

Les glColor comme tu les avais placés n'impactaient que le prochain sommet envoyé...

#include<gl/glut.h>


static float RX=0.0;
static float RY=0.0;
static float RZ=0.0;


void Reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,(float)width/(float)height,0.01,20);
glMatrixMode(GL_MODELVIEW);
}


void InitGL(void)
{
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
}


void Draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glLoadIdentity();
gluLookAt(5,5,5,0,0,0,0,1,0);


glRotatef(RX,1.0f,0,0);
glRotatef(RY,0,1.0f,0);
glRotatef(RZ,0,0,1.0f);


glColor3f(1.0f,0,0);
glBegin(GL_QUADS);
glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glEnd();


glColor3f(0,1.0f,0);
glBegin(GL_QUADS);


glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glEnd();


glColor3f(0,0,1.0f);
glBegin(GL_QUADS);


glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glVertex3f(1.0f,1.0f,-1.0f);
glEnd();


glColor3f(0,1.0f,1.0f);
glBegin(GL_QUADS);


glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glEnd();


glColor3f(1.0f,1.0f,0);
glBegin(GL_QUADS);


glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(1.0f,1.0f,1.0f);
glVertex3f(1.0f,1.0f,-1.0f);
glEnd();


glColor3f(1.0f,0,1.0f);
glBegin(GL_QUADS);


glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,1.0f);
glVertex3f(1.0f,-1.0f,1.0f);
glVertex3f(1.0f,-1.0f,-1.0f);
glEnd();


glutSwapBuffers();


}


void idle()
{
RX+=1.0f;
RY+=2.0f;
RZ+=3.0f;
glutPostRedisplay();
}


int main( int argc, char *argv[ ])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640,480); //Optionnel
glutCreateWindow("Ma première fenêtre OpenGL !");
//glutFullScreen(); //Optionnel
glutReshapeFunc(Reshape);
glutDisplayFunc(Draw);
InitGL();


glutIdleFunc(idle);
glutMainLoop();


return 0;
}

KeniiyK
3
asmanur Messages postés 230 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 4 août 2005
7 juil. 2005 à 17:16
manque un glLoadIdentity avant gluLookAt pour réinitialiser la matrice sinon tu enchaines mvt sur mvt
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
7 juil. 2005 à 19:46
effectivement ca vas mieux.
Par cotre, nouveau problème du coup. Dans la suite du tuto, la fonction InitGL devient :

void InitGL(void)
{glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}

Or quand je met ça (en fait même avant) l'affichage déconne, alors qu'il est dit que c'est censé le stabiliser.
En fait je suis censé obtenir o final un cube avec des faces de différentes couleures, mais moi g des faces qui manquent et d'autres qui sont troncquées.

S que quelqu'un saurait me dire pkoi ? Please !
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
7 juil. 2005 à 19:52
Je vien de faire le test : même si je n'affiche qu'une face à la fois, avec ou sans le glenable(gl_depth_test) la face s'affiche mal, enfin ca dépend de la face, mais certaines faces avant n'affichent qu'un triangle !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
asmanur Messages postés 230 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 4 août 2005
7 juil. 2005 à 19:55
hum hum
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
t'es sur d'avoir bien copier collé ??
j'opterais pour
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0,0.0,0.0,0.0);
mais je suis pas sur que ce soit sa tu pourrais remettre le code en entire et indiquez l'adresse du tuto stp?
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
7 juil. 2005 à 21:14
voila la page ou j'en suis dans le tuto (bien sur il faut aussi se rapporter aux chapitres précédents, mais je ne suis pas très avancé pour le moment

Sinon, le code en entier :

#include<gl/glut.h>

int WindowName;
double a=0;

void Reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(
45,
(float)width/(float)height,
0,
100
); //Pour les explications, lire le tutorial sur OGL et win
glMatrixMode(GL_MODELVIEW); //Optionnel
}

void InitGL(void)
{glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}


void Draw()
{




glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(5,5,5,0,0,0,0,1,0);
glBegin(GL_QUADS);

glColor3d(1,0,0);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
//1 face

glColor3d(0,1,0);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//2 faces

glColor3d(0,0,1);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
//3 faces

glColor3d(0,1,1);
glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//4 faces

glColor3d(1,1,0);
glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
//5 faces

glColor3d(1,0,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
//6 faces
glEnd(); //"Cette fois, j'le sens bien..."

glutSwapBuffers();
//glutSwapBuffers(); pour glut
glutPostRedisplay(); //Uniquement pour GLUT
}



int main( int argc, char *argv[ ], char *envp[ ] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640,480); //Optionnel
WindowName = glutCreateWindow("Ma première fenêtre OpenGL !");
glutFullScreen(); //Optionnel

InitGL();
glutReshapeFunc(Reshape);
glutDisplayFunc(Draw);

glutMainLoop();

return 0;

}

Merci d'avance !
0
asmanur Messages postés 230 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 4 août 2005
8 juil. 2005 à 07:06
il manque glClearColor comme je l'ai dit avant et mets ton couple LookAt+LoadIdentity avant le premier glClear sinon a parrt ca je vois rien d'autre
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
8 juil. 2005 à 11:34
Merci de la réponse mais ca n'as rien modifié.

Voila ce que j'obtient.

http://programmer.free.fr/opengl.jpg

Sachant que dans le tutos ils cherchent a faire afficher un cube.

S que C possible que ce soit a cause de DEV-C++ ? g deja pu remarquer dans certains cas qu'il faisait des trucs bizzars !

Ou alors mal config ?
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
8 juil. 2005 à 18:33
Pkoi le fait de mettre glBegins(GL_QUADS); me fait un carré dans le cas de :

glColor3d(1,0,0);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);

et me fait un triangle dans le cas de :

glColor3d(0,0,1);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);

Qqun pourrai-il m'expliquer please ?
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
8 juil. 2005 à 18:39
Et quand je remet je DEPTH_TESTn le 1° me fait un triangle et le deuxième rien du tout ?????????
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
8 juil. 2005 à 20:06
Tiens j'ai corrigé le code.... ca marche... en passant ce code ne peut pas afficher un cube tel quel, t sur de bien l'avoir recupere (sans le changer) ?

#include<gl/glut.h>


void Reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,(float)width/(float)height,0,100);
glMatrixMode(GL_MODELVIEW);
}


void InitGL(void)
{
}


void Draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(5,5,5,0,0,0,0,1,0);


glBegin(GL_QUADS);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
//1 face
glEnd();


glBegin(GL_QUADS);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//2 faces
glEnd();


glBegin(GL_QUADS);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
//3 faces
glEnd();


glBegin(GL_QUADS);
glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//4 faces
glEnd();


glBegin(GL_QUADS);
glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
//5 faces
glEnd();


glBegin(GL_QUADS);
glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
//6 faces
glEnd(); //"Cette fois, j'le sens bien..."


glutSwapBuffers();
//glutSwapBuffers(); pour glut
// glutPostRedisplay(); //Uniquement pour GLUT
}


int main( int argc, char *argv[ ], char *envp[ ] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640,480); //Optionnel
glutCreateWindow("Ma première fenêtre OpenGL !");
//glutFullScreen(); //Optionnel
glutReshapeFunc(Reshape);
glutDisplayFunc(Draw);
InitGL();


glutMainLoop();


return 0;
}

KeniiyK

PS : si t'as des kestion... postes les... @+
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
8 juil. 2005 à 21:08
http://www-evasion.imag.fr/Membres/Antoine.Bouthors/teaching/opengl/opengl4.html

C de la que je tien mon tuto.

Merci pour la correction qui m'apporte deja pas mal de compréhension en plus.

Par contre, pkoi l'une des faces du cube apparait-elle triangulaire (d'ailleurs ca doit pas etre la seul car on verrait celle de derrière)

Et ot chose en passant. Quand je met les couleurs, je me rend compte que certaines faces apparaissent sur d'autres alors qu'elles sont derrières. J'ai donc mis le test de profondeur, mais la c pire g la plupart des faces les une sur les autres.

Si tu as le courage de répondre encore a un gars qui vas bientot finir dans le rang des lourdaux à force de tjrs avoir des pb dans son code (:D) Merci d'avance pour ta patience et pour tes recherches et réponses.
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
8 juil. 2005 à 21:16
J'ai pas vu de faces triangulaire, pour les couleurs poste ton code modifié je jeterai un oeil.

KeniiyK
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
8 juil. 2005 à 21:58
Voila le code pour les couleurs ! Avec la "gestion des profondeurs" ainsi que deux screenshots un avec depth_test et l'autre sans pour te montrer les "faces triangulaires"

#include<gl/glut.h>

void Reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,(float)width/(float)height,0,100);
glMatrixMode(GL_MODELVIEW);
}

void InitGL(void)
{glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}

void Draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(5,5,5,0,0,0,0,1,0);

glBegin(GL_QUADS);
glColor3d(1,0,0);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
//1 face
glEnd();

glBegin(GL_QUADS);
glColor3d(0,1,0);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//2 faces
glEnd();

glBegin(GL_QUADS);
glColor3d(0,0,1);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
//3 faces
glEnd();

glBegin(GL_QUADS);
glColor3d(0,1,1);
glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
//4 faces
glEnd();

glBegin(GL_QUADS);
glColor3d(1,1,0);
glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
//5 faces
glEnd();

glBegin(GL_QUADS);
glColor3d(1,0,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
//6 faces
glEnd(); //"Cette fois, j'le sens bien..."

glutSwapBuffers();
//glutSwapBuffers(); pour glut
glutPostRedisplay(); //Uniquement pour GLUT
}

int main( int argc, char *argv[ ], char *envp[ ] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640,480); //Optionnel
glutCreateWindow("Ma première fenêtre OpenGL !");
//glutFullScreen(); //Optionnel
glutReshapeFunc(Reshape);
glutDisplayFunc(Draw);
InitGL();

glutMainLoop();

return 0;
}

http://programmer.free.fr/opengl_screen.jpg
0
mondrone Messages postés 246 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 11 mars 2012
9 juil. 2005 à 10:56
Franchement je n'ai qu'une seule chose à dire cette fois : Merci beaucoup !
0