Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
745 connectés 

  FORUM HardWare.fr
  Programmation

  [OpenGL] gestion clavier/souris

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OpenGL] gestion clavier/souris

n°29338
Bounga69
Wii will rock you
Posté le 04-05-2001 à 19:14:27  profilanswer
 

salut tlm, j'ai fais un petit programme de base qui affiche un carré. Jusque là rien de difficile. Je fais un petit truc pour gérer une touche (ici echappe pour quitter le prg), ça fonctionne. Ce que j'aimerais, ce seait le point de vue avec clavier/souris. J'ai essayé via gluLookAt, mais ça n'a pas l'air de fonctionner. Voilà le prog :
[source]
#include <gl/glut.h>
#include <iostream.h>
 
void reshape(int largeur, int longueur);
void draw();
void gestion_clavier(unsigned char touche, int x, int y);
void gestion_clavier_special(int touche, int x, int y);
void dep_lat_droite(int x);
void mouse_func(int x, int y);
void InitGL();
 
int fenetre_nom;
 
int main ( int argc, char *argv[], char *envp[] )
{
 glutInit ( &argc, argv);
 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
 glutInitWindowSize(1024,768);
 fenetre_nom = glutCreateWindow("test2" );
 glutFullScreen();
 
 glutReshapeFunc(reshape);
 glutDisplayFunc(draw);
 InitGL();
 
 glutMainLoop();
 
 return 0;
}
 
void reshape(int largeur, int longueur)
{
 glViewport(0,0,largeur,longueur);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(45, float(largeur/longueur), 1, 100);
 glMatrixMode(GL_MODELVIEW);
}
 
void draw()
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 glutKeyboardFunc(gestion_clavier);
 glBegin(GL_QUADS);
  glColor3f(1,0,0);
   glVertex3i(-1,-1,-1);
   glVertex3i(-1,1,-1);
   glVertex3i(1,1,-1);
   glVertex3i(1,-1,-1);
 
  glColor3f(0,1,0);
   glVertex3i(-1,-1,1);
   glVertex3i(-1,1,1);
   glVertex3i(1,1,1);
   glVertex3i(1,-1,1);
 
  glColor3f(0,0,1);
   glVertex3i(-1,-1,1);
   glVertex3i(-1,-1,-1);
   glVertex3i(1,-1,-1);
   glVertex3i(1,-1,1);
 
  glColor3f(1,1,0);
   glVertex3i(-1,1,1);
   glVertex3i(-1,1,-1);
   glVertex3i(1,1,-1);
   glVertex3i(1,1,1);
 
  glColor3f(1,0,1);
   glVertex3i(-1,-1,1);
   glVertex3i(-1,-1,-1);
   glVertex3i(-1,1,-1);
   glVertex3i(-1,1,1);
 
  glColor3f(0,1,1);
   glVertex3i(1,-1,1);
   glVertex3i(1,-1,-1);
   glVertex3i(1,1,-1);
   glVertex3i(1,1,1);
 glEnd();
 
 glutSwapBuffers();
 
 glutPostRedisplay;
}
 
void gestion_clavier(unsigned char touche, int x, int y)
{
 if (touche == 27)
  exit (0);
 
 gluLookAt(10,10,10,x,y,0,0,1,0);
}
 
void InitGL()
{
 glEnable(GL_DEPTH_TEST);
 glClear(GL_DEPTH_BUFFER_BIT);
}
 
[/source]
 
si j'initialise les valeurs de x et y à 0, il m'affiche le cube, mais le point que je veux regarder ne change pas.
Si je n'initialise pas x et y, l'écran est tout rouge, en fait je pense qu'on est dans le cube et que l'on voit la face arrière.
 
Quelqu'un a une idée, une @ vers un tutorial expliquant très bien ce genre de truc, ou un bouquin ?
Merci

mood
Publicité
Posté le 04-05-2001 à 19:14:27  profilanswer
 

n°29383
Bounga69
Wii will rock you
Posté le 05-05-2001 à 12:17:59  profilanswer
 

up up up
je sais qu'il y a des gens compétants ici, alors help please !!!!!!

n°29523
DJKurgan
Posté le 06-05-2001 à 18:01:04  profilanswer
 

Slt, pour deplacement style quake, un bon depart c'est le site de nehe, lecon 10, tu auras des equations de mouvement:
http://nehe.gamedev.net, bon code ;)

n°29841
LeGreg
Posté le 08-05-2001 à 11:29:32  profilanswer
 

Quelques infos parce que la tu n'as pas l'air de maitriser trop ce que tu ecris:
>> draw, reshape, et gestion_clavier sont des fonctions de type callback, c'est a dire que tu fournis un pointeur vers la fonction pour qu'elle puisse etre "rappelee" plus tard.
C'est pas illegal de redefinir le pointeur a l'interieur d'une fonction callback mais bon c'est vrai que c'est plus logique de le faire a l'exterieur surtout qu'il ne change pas!
>> gluLookAt(10,10,10,x,y,0,0,1,0);  
La aussi il est mal place: Il est appele lorsque tu appuies sur une touche mais son emplacement dans la sequence de definition des matrices est imprecis et certainement incorrect. De toute facon comme avant tout affichage tu as un loadIdentity, tu te rends compte qu'il ne sert a rien!
gluLookAt est une fonction avec un comportement precis que je te conseille de relire dans la doc OpenGL.
>> glutPostredisplay, il ne sert a rien la encore la ou il est place, parce qu'entre le moment ou tu as affiche la scene et envoye le redisplay la scene n'a pas change!
 
Je te propose les remaniements suivants:
Tu mets le glutKeyboardFunc dans ta fonction main,
tu definis une variable globale X et Y qui correspondent a ton deplacement.
Tu mets le gluLookAt(avec X et Y) juste apres le LoadIdentity dans ta fonction draw et tu deplaces le glmaxtrixmode(modelView) dans le reshape.
Dans gestion clavier, tu changes les valeurs de X et Y en fonction de tes x et y et tu fais suivre ce changement par un glutPostRedisplay. (que tu vires de ta fonction draw, si tu ne changes rien a la scene..)
 
Apres, il faudra definir une vraie fonction de deplacement
parce que ton gluLookAt ne va pas te mener tres loin.
 
A+
LEGREG

n°29866
Bounga69
Wii will rock you
Posté le 08-05-2001 à 14:12:03  profilanswer
 

merci legreg, mais j'avais fait ça avant et j'ai voulu voir si mon pb venait de là en changeant tout, mais ça ne changeait rien.
Mais c'est bon, maintenant j'ai fait un prg qui fonctionne à peu près, un cube qui tourne d'après une action sur la souris, qui se déplage suivant les fléches, page up et page down. Le problême c'est pour la rotaion en fait, il faudrait que je redéfinisse le répère après chaque translation mais ca sera pour une prochaine fois, là j'ai des exams pour la semine prochaine à préparer.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [OpenGL] gestion clavier/souris

 

Sujets relatifs
[C] prob de souris qui efface(avec interup...)Telecharger les .h et .lib de OpenGL
[OpenGL] redbook[openGL/Borland] > ERROR : GLUT32.LIB' contains invalid OMF record
[OPENGL] pourquoi ca veut pas marcher chez moi?OPENGL question pour darkoli
OpenGl - Depth BufferDeplacer la souris avec VB ?
ou trouver des cours de c++ builder pour directX ou openGlManipuler la souris sous windows ?
Plus de sujets relatifs à : [OpenGL] gestion clavier/souris


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR