glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: [A peu près résolu]soucis detection souris en 3D Sam 21 Juil 2012 - 0:15 | |
| voila, je veux que la souris interagisse avec la scene en 3D voici le vecteur direction que j'ai trouver : gabin49 - Citation :
- vec.x = ldir_x(1,-atan((event.button.x-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.x);
vec.y = ldir_y(1,-atan((event.button.x-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.x); vec.z = ldir_y(1,-atan((event.button.y-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.y);
glTranslatef(camera.pos.x+vec.x,camera.pos.y+vec.y,camera.pos.z+vec.z); la fenetre fait 500*500, le FOV est a 70 le soucis est la, lorsque je met la souris sur le bord en abscisse(en haut), ca fonctionne nickel : mais lorsque je met la souris au milieu en abscisse(toujours en haut) ca donne ca : j'ai essayer de modifier l'equation : - Citation :
- vec.x = ldir_x(ldir_x(1,-atan((event.button.y-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.y),-atan((event.button.x-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.x);
vec.y = ldir_y(ldir_x(1,-atan((event.button.y-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.y),-atan((event.button.x-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.x); vec.z = ldir_y(1,-atan((event.button.y-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.y);
glTranslatef(camera.pos.x+vec.x,camera.pos.y+vec.y,camera.pos.z+vec.z); cette fois ci, c'est l'inverse : au milieu de l'ecran sur l'abscisse, l'objet est a la bonne position mais au bords, il est trop haut Une solution ? EDIT : j'ai réussi à synthétiser l'équation (c'est pas du pur exact mais c'est a peu près ce que je voulais) voila le vecteur direction : - Code:
-
sVec3D vec; float fl=(abs(event.button.x-250.0f)/250.0f)*1+(1-abs(event.button.x-250.0f)/250.0f)*ldir_x(1,-atan((event.button.y-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.y); vec.x = ldir_x(fl,-atan((event.button.x-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.x); vec.y = ldir_y(fl,-atan((event.button.x-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.x); vec.z = ldir_y(1,-atan((event.button.y-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.y);
ldir_y(1,-atan((event.button.y-250.0f)/600.0f)/M_PI*180/45*70+camera.dir.y); voici le programme (exe) de test : http://min.us/ms31UT1KE |
|
Gab666 Modérateur 'Zut'
Messages : 5340 Localisation : **I move away from the mic to breathe in
| Sujet: Re: [A peu près résolu]soucis detection souris en 3D Mar 24 Juil 2012 - 2:14 | |
| Personnellement, si tu veux calculer les déplacement en 3D, je te conseille de garder deux angles et travailler en coordonnées sphériques, c'est pas mal plus simple. Je me suis fait un dessin et je t'ai calculé les coordonnées. Soit theta l'angle sur le plan Oxy où quand theta=0 le vecteur est parallèle à x et phi l'angle entre Oxy et z où quand phi=0, le vecteur est parallèle à Oxy
r le rayon du cercle formé par theta R la sphère formée par phi et theta
R=1(ou tout autre constante) r=R*cos(phi)
x=r*cos(theta) y=r*sin(theta) z=R*sin(phi)
x=R*cos(phi)*cos(theta) y=R*cos(phi)*sin(theta) z=R*sin(phi)
0<theta<2*pi -pi/2<phi<pi/2
Ensuite, tu peux faire varier theta et phi selon les mouvement de la souris(pour ton affichage), et quand il y a déplacement tu utilises le vecteur calculé plus haut.
N.B.: J'ai pas vérifié mes calculs, donc je peux être dans l'erreur, mais ça semble bon.
mathworld.wolfram.com/SphericalTrigonometry.html _________________ PIS MANIAC PREND DES BAINS !
|
|