Précédent   Forum des professionnels en informatique > Applications > Développement 2D, 3D et Jeux > API graphiques > OpenGL
OpenGL Forum d'entraide sur le développement en OpenGL. Avant de poster -> FAQ OpenGL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 19h26   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 108
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 108
Points : 14
Points : 14
Par défaut PB avec gluPerspective

Bonjour à tous,

Voulant apprendre à utiliser OpenGL j'ai suivi un tutoriel sur le net. J'ai donc fait des exos, dont l'un était de réaliser un programme en C++ permettant de se déplacer dans une scène remplie d'objet ( ces objets sont des sphères, des cubes, un tore, ...).

Après avoir suivi les instructions du tutoriel j'ai écris le code et un makefile. Mais mon souci c'est que le programme ne compile pas et j'ai le message d'erreur suivant:

ballade.o: In function `changePerspective()':
ballade.cc.text+0x60c): undefined reference to `gluPerspective'

et lorsque je mets la fonction d'openGL gluPerspective en commentaire la scène ne s'affiche pas. Pourriez vous m'aider à résoudre ce problème ?

voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
 
 
/********************************************************/
/* ballade.cc */
/********************************************************/
/* 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>
 
 
// les prototypes des fonctions 
 
void display(); // fonction qui gère l'affichage de la scène et la position de la camera 
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(); //fonction qui permet de savoir si l'utilisateur est sorti de la pièce
void changePerspective(); // changer de perspective
 
// initialisation des variables
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(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutInitWindowPosition(200,200); // position de la fenetre par rapport au coin gauche de l'ecran
glutInitWindowSize(500,500);// taille de la fenetre
glutCreateWindow("ballade 3D");
 
/* Initialisation d'OpenGL */
glClearColor(1.0,1.0,1.0,1.0); // la fenetre est initialisé avec un fond noir
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(); // attente des évenements si rien est décidé par l'utilisateur
return 0;
}
 
 
void display()
{
/* effacement de l'image avec la couleur de fond */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); // initialisation de la matrice de transfomation
 
/*Application des transformation de visualisation */ // matrice de projection
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_BUTTON&&state==GLUT_DOWN)
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);
}
et voici mon makefile :

Citation:

default: ballade

CC=g++

ballade.o: ballade.cc
$(CC) -c ballade.cc

ballade: ballade.o
$(CC) -o ballade ballade.o -lglut

clean:
rm *.o
Cordialement Takout
takout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 09h06   #2
Membre Expert
 
Homme Sylvain DOREMUS
Ingénieur - Développeur
Inscription : juin 2005
Messages : 534
Détails du profil
Informations personnelles :
Nom : Homme Sylvain DOREMUS
Âge : 30
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur - Développeur
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 534
Points : 1 066
Points : 1 066
Envoyer un message via MSN à dragonjoker59
dans ton makefile, avant -lglut (link de la lib glut pour les fonctions glutxxx), il faut ajouter -lGL (link de la lib GL pour les fonctions glXXX) et vu que tu utilises gluPerspective, il te faut auss -lGLU (link de la lib GLU pour les fonctions gluXXX)
__________________
Si vous ne trouvez plus rien, cherchez autre chose...

Chef de projet (et unique exécutant pour l'instant) pour Castor 3D
dragonjoker59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 09h55   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2011
Messages : 108
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 108
Points : 14
Points : 14
Je vous remercie ça fonctionne !

Mais j'ai pas compris pourquoi, pouvez vous m'expliquer c'est quoi un linker svp ?

Cordialement Takout.
takout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 09h59   #4
Membre éprouvé
 
Avatar de Kannagi
 
Homme
Étudiant
Inscription : mai 2010
Messages : 262
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 262
Points : 474
Points : 474
Envoyer un message via MSN à Kannagi
linker , veut dire lier ,c'est a dire que ton programme lie les fonction entre executable et les libs.

Quand tu fais gluPerspective ,c'est une fonction qui se trouve dans une librairie.
le #include <GL/glut.h> ne possède que les structure et les prototype des fonction ,nullement leur instruction.
Donc si tu fais pas un link , ton debuggeur ,te dis que il ne sait pas ou se trouve cette fonction donc tu ne peut pas appelé.
Kannagi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h55.


 
 
 
 
Partenaires

Hébergement Web