darkoli a écrit a écrit :
c'est pas clair cette histoire !!!
qu'est ce que tu appelle un truc 'pas reel' ? Tu veux que le mouvement soit fait douement en plusieurs etapes ?
|
Pour être plus explicite, je donne mon code source, vous vous renderez mieux compte de mon problème :
Je veux donc que le personnage tourne suivant la sourie, et avance suivant les touches directionnelles. C'est un programme de base, mais j'essaye de gerer une camera d'un jeu du type Quake, donc je fais des essais.
Voilà mon code source : J'attend vos réponses...
code source :
--------------
/*
From pymousses
*/
#include <glut.h>
#include <math.h>
#include <glu.h>
#include <stdio.h>
#include <gl.h>
void InitGL();
void Reshape(int width, int height);
void Draw();
void GestionClavier(unsigned char, int, int);
void GESTIONSOURIE(int,int);
int Win1;
double a=0; //Angles
int etatsourie[2]={0,0}; /* enregistre les coordonnées précedentes de la sourie */
double dte=0,distance=25,distancee=25.0;
int R;
////////////////////////////////////////////////////////////////////////////
int main( int argc, char *argv[ ], char *envp[ ] )
{
glutInit(&argc,argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
Win1 = glutCreateWindow("Maison virtuelle !" );
InitGL();
glutReshapeFunc(Reshape);
glutDisplayFunc(Draw);
glutSpecialFunc(GestionClavier);
glutPassiveMotionFunc(GESTIONSOURIE);
glutFullScreen();
glutMainLoop();
return 0;
}
////////////////////////////////////////////////////////////////////////////
void GestionClavier(unsigned char key, int x, int y)
{
R=0;
switch (key) {
case GLUT_KEY_LEFT :
dte+=0.2;
break;
case GLUT_KEY_UP :
distance-=0.5;
break;
case GLUT_KEY_RIGHT :
dte-=0.2;
break;
case GLUT_KEY_DOWN :
distance+=0.5;
break;
case GLUT_KEY_END :
exit(0);
break;
}
}
//////////////////////////////////////////////////
//////////////////////////
void GESTIONSOURIE (int x,int y) {
int resx,resy;
R=1;
resx=etatsourie[0] - x;
resy=etatsourie[1] - y;
if (resx <0) {
a+=5;
etatsourie[0]=x;
}
else if (resx >0) {
a-=5;
etatsourie[0]=x;
}
else if (resy <0) {
/*etatsourie[1]=y;
b+=1; */
}
else {
/* etatsourie[1]=y;
b-=1; */
}
if (x==0) {
a-=5;
etatsourie[0]=x;
}
if (x==1023) {
a+=5;
etatsourie[0]=x;
}
}
//////////////////////////////////////////////////////////////////////////////
void Reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,width/height,1,100);
glMatrixMode(GL_MODELVIEW);
}
////////////////////////////////////////////////////////////////////////////
void Draw()
{
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,1,3,0,0,0,0,5,0);
/* -------------- Action suivant touches tapées ou souris deplacée ------------------- */
glRotated(a,0,1,0); /* rotation autour axe y | */
glTranslatef(0,0,-distance); /* key up or down */
glTranslatef(dte,0,0); /* key right or left */
/* -------------- Fin de l'Action suivant touche tapées ou souris deplacée ------------------- */
glBegin(GL_QUADS);
glColor3d(1,0,0);
glVertex3i(0,0,0-10);glVertex3i(1,0,0-10);glVertex3i(1,1,0-
10);glVertex3i(0,1,0-10);
glVertex3i(0,0,0-10);glVertex3i(0,0,1-10);glVerte
x3i(0,1,1-10);glVertex3i(0,1,0-10);
glVertex3i(0,0,1-10);glVertex3i(1,0,1-10);glVerte
x3i(1,1,1-10);glVertex3i(0,1,1-10);
glVertex3i(1,0,1-10);glVertex3i(1,0,0-10);glVerte
x3i(1,1,0-10);glVertex3i(1,1,1-10);
/* sol */
glVertex3i(0,0,0-10);glVertex3i(0,0,1-10);glVerte
x3i(1,0,1-10);glVertex3i(1,0,0-10);
glColor3d(1,1,0);
glVertex3i(0,1,1-10);glVertex3i(1,1,1-10);glVertex3f(1,1.5,0.5-
10);glVertex3f(0,1.5,0.5-10);
glVertex3i(0,1,0-10);glVertex3i(1,1,0-10);glVerte
x3f(1,1.5,0.5-10);glVertex3f(0,1.5,0.5-10);
glEnd();
glBegin(GL_TRIANGLES);
/* toit */
glColor3d(0,1,0);
glVertex3f(0,1,0-10);glVertex3f(0,1.5,0.5-10);glVe
rtex3i(0,1,1-10);
glColor3d(0,1,0);
glVertex3f(1,1,0-10);glVertex3f(1,1.5,0.5-10);glVe
rtex3i(1,1,1-10);
glEnd();
glutSwapBuffers();
glutPostRedisplay();
}
////////////////////////////////////////////////////////////////////////////
void InitGL()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING); // Active l'éclairage
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
}
//Fin///////////////////////////////////////////////
---------------
From Pymousses.