OpenGL avec GLUT please help

Résolu
Signaler
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012
-
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012
-
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

Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

manque un glLoadIdentity avant gluLookAt pour réinitialiser la matrice sinon tu enchaines mvt sur mvt
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

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 !
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

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 !
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

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?
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

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 !
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

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
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

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 ?
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

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 ?
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Et quand je remet je DEPTH_TESTn le 1° me fait un triangle et le deuxième rien du tout ?????????
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
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... @+
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

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.
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
J'ai pas vu de faces triangulaire, pour les couleurs poste ton code modifié je jeterai un oeil.

KeniiyK
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

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
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Franchement je n'ai qu'une seule chose à dire cette fois : Merci beaucoup !