Problèmes avec Dev c++, OpenGL et Glut
Forum Programmation : Problèmes avec Dev c++, OpenGL et Glut
Bonjour,
Alors voila en fait j'ai un gros projet à faire dans le cadre de mes études, et j'ai choisi (avec mon groupe de projet) de faire un moteur 3D. Nous avons trouvé des didact sur internet et nous avons essayé de tester les codes sources avec dev c++. Le problème c'est que ça ne compile pas!!! et comme je ne suis pas une pro de glut et openGl, je ne sais pas ce qui cloche dans le code... je vous donne le code :
/********************************************************/
/* ballade.c */
/********************************************************/
/* Petite ballade dans un monde (reduit) en fil de fer */
/********************************************************/
/* inclusion des fichiers d'entete Glut */
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
void display();
void keyboard(unsigned char key,int x, int y);
void mousePress(int bouton,int state,int x,int y);
void MouseMotion(int x,int y);
void calcCosSinTable();
void testPosition();
void changePerspective();
float pz=0.0,px=0.0,Sin[360],Cos[360],theta=50;
int xold,r=0;
int main(int argc,char **argv)
{
/* initialisation de glut et creation
de la fenetre */
glutInit(
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutInitWindowPosition(200,200);
glutInitWindowSize(500,500);
glutCreateWindow("29" );
/* Initialisation d'OpenGL */
glClearColor(0.0,0.0,0.0,0.0);
changePerspective();
/* Precalcul des sinus et cosinus */
calcCosSinTable();
/* enregistrement des fonctions de rappel */
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mousePress);
glutMotionFunc(MouseMotion);
/* Entre dans la boucle principale glut */
glutMainLoop();
return 0;
}
void display()
{
/* effacement de l'image avec la couleur de fond */
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
/*Application des transfos de visualisation */
glRotated(r,0.0,1.0,0.0);
glTranslatef(−px,0.0,−pz);
glPushMatrix();
/* Dessin des objets */
glTranslatef(0,1.5,0);
glScalef(1.0,0.25,1.0);
glColor3d(1,0,0);
glutWireCube(20);
glPopMatrix();
glPushMatrix();
glTranslated(5,−1,5);
glRotated(−90,1,0,0);
glColor3f(1.0,1.0,1.0);
glutWireCone(1,2,20,1);
glPopMatrix();
glPushMatrix();
glTranslated(−5,0,5);
glutWireTorus(0.2,0.8,20,30);
glPopMatrix();
glPushMatrix();
glTranslated(5,0,−5);
glutWireCube(2);
glPopMatrix();
glTranslated(−5,0,−5);
glutWireSphere(1,20,20);
/* on force l'affichage du resultat */
glFlush();
glutSwapBuffers();
}
void keyboard(unsigned char key,int x, int y)
{
switch (key)
{
case 'q':
exit(0);
case 'z':
pz−=0.5*Cos[r];
px+=0.5*Sin[r];
testPosition();
glutPostRedisplay();
break;
case 's':
pz+=0.5*Cos[r];
px−=0.5*Sin[r];
testPosition();
glutPostRedisplay();
break;
case 'b':
theta+=1;
if (theta>180)
theta=180;
changePerspective();
glutPostRedisplay();
break;
case 'n':
theta−=1;
if (theta<0)
theta=0;
changePerspective();
glutPostRedisplay();
break;
}
}
void mousePress(int bouton,int state,int x,int y)
{
if (bouton==GLUT_LEFT_BUTTONN){
xold=x;
}
}
void MouseMotion(int x,int y)
{
r+=x−xold;
if (r>=360)
r−=360;
if (r<0)
r=360+r;
xold=x;
glutPostRedisplay();
}
void calcCosSinTable()
{
int i;
for (i=0;i<360;i++){
Sin[i]=sin(i/360.0*6.283185);
Cos[i]=cos(i/360.0*6.283185);
}
}
void testPosition()
{
if (px>9.8)
px=9.8;
if (px<−9.8)
px=−9.8;
if (pz>9.8)
pz=9.8;
if (pz<−9.8)
pz=−9.8;
}
void changePerspective()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(theta,1.0,0.1,40.0);
glMatrixMode(GL_MODELVIEW);
}
Voilà j'espère qu'un amatteur ou un pro passeront par là pour m'aider... vite...
Merci!!
avec la retranscription des erreurs ce serait aussi bien...
Euh j'ai pensé à mettre les erreurs mais le problème c'est qu'il y en a énormément ... :-(
Elles sont toutes du genre :
[linker error] undefined reference to 'glutNomFonction'
Sinon j'avais oublié de mettre les arguments dans glutInit :
glutInit(&argc, argv);
et d'enlever un 'N' à '(bouton==GLUT_LEFT_BUTTONN)'
voilà
| Citation :
|
donc c'est que tes bibliothèques ne peuvent pas être incluses. Est-ce que tu as indiqué le bon chemin dans le makefile ?
Ces fonctions sont définies dans libglut.a
Donc vérifie que tu as bien ce fichier dans le répertoire "lib" de dev-c++
S'il n'est pas dans ce répertoire ajoute le répertoire dans les options du compilateur > répertoires de lib
Ou vérifie qu'à cet endroit tu as bien le répertoire "lib" de dev-c++
Ben en fait j'ai installé glut sur dev c++ avec les DevPack, et j'ai testé la démo qu'ils donnent et elle marche très bien....
, je comprends po...
Ah et pour répondre à ritzle, je n'ai pas fait de makefile j'ai juste cliqué sur complier directement
les demos marchent parce qu'elles sont linkees. Va voir dans les options des projets et tu verras des -lglut et autres options de compilation dont tu as aussi besoin dans tes propres projets.
Oui mais avec les DevPack c'est pas censé tout s'installer automatiquement?
quand tu as cree un nouveau projet, tu as sélectionné "Glut" ?
Si c'est pas le cas c'est normal, il faut faire comme khayyam l'a dit.
oui oui j'ai bien sélectionné glut quand j'ai crée un nouveau projet... mais de toute façon quand on veut juste tester sur un fichier (sans créer de projet), il suffit juste d'inclure glut.h non?
et bien ... non
il faut linker la bibliotheque.
le .h ne contient que les noms des autres objets, pas les objets eux memes qui sont dans les .a et .dll
ah oui j'avais pas pensé à ça lol
khayyam a trouvé le problème: tu ne lies pas avec libglut.a
Donc:
Projet>options du projet>paramètres>dans la partie editeur de lien>Ajouter fichier
et tu mets libopengl32.a et glut.a
Le mieux étant de regarder sur les exemples ce qui est écrit.
J'ai donc fait comme ritzle m'a dit, créer un nouveau projet et sélectionner Glut, et ça marche... pourtant j'avais deja essayé et ça n'a pas marché. Curieux, curieux...
En tout cas merci!
Il y a 2039 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
