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

 


Dernière réponse
Sujet : [OpenGL] gestion clavier/souris
Bounga69 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.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Bounga69 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.
LeGreg 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
DJKurgan 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 ;)
Bounga69 up up up
je sais qu'il y a des gens compétants ici, alors help please !!!!!!
Bounga69 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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)