Espace openGL

sebrs1 Messages postés 81 Date d'inscription dimanche 15 avril 2001 Statut Membre Dernière intervention 20 novembre 2012 - 4 févr. 2005 à 23:14
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 5 févr. 2005 à 21:20
j'ai une petite question, voila je debute en openGL, mais je voudrais
avoir un pti renseignement, est-ce que dans openGL, chaque axe de
l'espace ne depasse pas l'interval [-1.0;1.0]. Moi mon but est de
faire une map, donc pour l'instant j'apprend mais bon c pour la suite
que je voudrais savoir ça. sinon pour la camera, avec glulookat,
j'ai fait un programme qui est censé faire tourner une camera autour
d'un triangle plat (2D) seulement apparemment le triangle fait un
cercle mais devant la camera .



voici mon prog



/* inclusion des fichiers d'en-tete Glut */



#include <glut.h>

#include <math.h>

#include <stdio.h>



void affichage();

void clavier(unsigned char touche,int x,int y);



double anglescamera[80][2];

int angle;



int main(int argc,char **argv)

{

int i;



angle = 0;



/* initialisation de glut et creation

de la fenetre */

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

glutInitWindowPosition(10,10);

glutInitWindowSize(800,600);

glutCreateWindow("principale");



for (i=0;i<=79;i++){

anglescamera[i][0] = cos(((3.1415927*2.0)/360.0)*4.5*(float)i);

anglescamera[i][1] = sin(((3.1415927*2.0)/360.0)*4.5*(float)i);

//printf ("x=%f et z=%f ",anglescamera[i][0],anglescamera[i][1]);

}



/* Initialisation d'OpenGL */

glClearColor(0.0,0.0,0.0,0.0);

glColor3f(1.0,1.0,1.0);

glPointSize(2.0);



/* enregistrement des fonctions de rappel */

glutDisplayFunc(affichage);

glutKeyboardFunc(clavier);





/* Entree dans la boucle principale glut */

glutMainLoop();

return 0;

}



void affichage()

{

/* effacement de l'image avec la couleur de fond */

glClear(GL_COLOR_BUFFER_BIT);



glLoadIdentity();



gluLookAt(anglescamera[angle][0],0.5,anglescamera[angle][1],0.0,0.0,10.0,0.0,0.1,0.0);



/* Dessin du polygone */

glBegin(GL_TRIANGLES);

glColor3f(1.0,0.0,0.0);

glVertex3f(0.0,1.0,0.0);

glColor3f(0.0,1.0,0.0);

glVertex3f(0.5,0.0,0.0);

glColor3f(0.0,0.0,1.0);

glVertex3f(-0.5,0.0,0.0);

glEnd();



glFlush();

/* on force l'affichage du resultat */



glutSwapBuffers();

}



void clavier(unsigned char touche,int x,int y)

{

switch (touche)

{

case 'p': /* affichage du carre plein */

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

glutPostRedisplay();

angle +=1;

if (angle > 79) angle -=80;

printf ("x=%f et z=%f \n",anglescamera[angle][0],anglescamera[angle][1]);



break;

case 'f': /* affichage en mode fil de fer */

glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);

glutPostRedisplay();

break;

case 's' : /* Affichage en mode sommets seuls */

glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);

glutPostRedisplay();

break;

case 'q' : /*la touche 'q' permet de quitter le programme */

exit(0);

}

}







pouvez vous m'aider??


@+
Sebrs1

PS (qui ne signifie pas playstation :-)) : visitez mon site qui fait ses début svp
http://universal-glandeur.fr.st

1 réponse

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
5 févr. 2005 à 21:20
"chaque axe de
l'espace ne depasse pas l'interval [-1.0;1.0]."

??????

???

qui t'a raconté une connerie comme ca?



sinon:

a quoi set ca:

for (i=0;i<=79;i++){

anglescamera[i][0] = cos(((3.1415927*2.0)/360.0)*4.5*(float)i);

anglescamera[i][1] = sin(((3.1415927*2.0)/360.0)*4.5*(float)i);

}

tu précalcules toutes les positions de la caméra c'est ca? absolument inutile, t'imagine s'ils devaient faire ca dans gta?

c'est d'ailleur beaucoup plus pratique sans:


case 'p': /* affichage du carre plein */

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

//glutPostRedisplay();

angle +=0.01;

//if (angle > 79) angle -=80;

camera_X=
cos(((PI)/360.0)*angle);

// idem pour cam_Y


break;


je crois que tes


glutPostRedisplay();

sont inutiles itou



si ca affiche un cercle je pense que c'est pasque ca tourne trop vite.

pas besoin de 2 buffers pour un rtuc comme ca

évite glut ( enfin ca c'est avis perso)


glPointSize(1.0);



c'est tout je crois...

va sur gametutorials.com, rubrique prog->openGL->page 2 (je crois) -> time-based movement

ou sur glinfrench (connais pas bien mais doit y avoir)



++

ad


_______________________


Omnia vincit labor improbus
0
Rejoignez-nous