seb2086
Messages postés96Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention 1 février 2010
-
15 juil. 2007 à 14:42
seb2086
Messages postés96Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention 1 février 2010
-
17 juil. 2007 à 21:27
Bonjour,
Je voudrais que la souris gère les rotations de la camera mais je n'y arrive pas.
J'arrive à gerer le deplacement en translation de celle-ci.
J'utilise les vecteurs pour les deplacements.
Merci.
seb2086
Messages postés96Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention 1 février 2010 16 juil. 2007 à 13:55
Merci de ta réponse,
mais en fait il faudrait que je recupere la variation de l'angle dans une variable de type float.
par exemple dans float CameraAngleY je voudrait recuperer la valeur de l'angle.
Donc je sais pas si peux avec cette fonction.
En fait moi je faisait comme ca :
CameraAngleX -= EtatSouris.lX *0.002;
J'ai l'angle de la camera egal à la position X de la souris * par une valeur.
Mais quand je fais ca la camera part dans tout les sens.
Donc si tu a une idée ;)
THEwarrior333
Messages postés192Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention30 janvier 2008 16 juil. 2007 à 15:43
Regardes dans le SDK, tu as de bons exemples sur la gestion de la
camera. Tu as même DXUT qui propose des classes de gestion de camera:
regardes comment ils font.
Sinon une méthode est de bouger ton vecteur directeur selon l'écart de
position de la souris. Ensuite tu mets à jour ta matrice de vue
D3DMatView.
Vous n’avez pas trouvé la réponse que vous recherchez ?
seb2086
Messages postés96Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention 1 février 2010 16 juil. 2007 à 18:13
Oui j'avais deja regardé mais j'ai pas reussi à comprendre leur code.
Par contre je voudrais bien que tu m'explique comment faire en bougeant le vecteur selon l'ecart de position de la souris.
Je pense que cette méthode se rapproche bien de ce que j'ai commencé à coder pour le clavier.
seb2086
Messages postés96Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention 1 février 2010 16 juil. 2007 à 18:29
Merci pour votre aide mais en fait c'est bon je vais utiliser ce que j'avais fait.
En fait mon problème c'et que ca tournait beaucoup trop vite et que je ne voyait rien.
Pour tester la camera j'ai juste charger un cube mais le probleme je pense c'est que le cube etait vraiment tout petit et comme je n'ai pas regler la camera en fonction de la taille de l'objet ca tourne beaucoup trop vite.
Donc j'ai reduit la vitesse de rotation CameraAngleY -= EtatSouris.lY *0.000000000002f et la ca tourne à une vitesse correcte.
Voila encore désolé de vous avoir embêter avec ca.
THEwarrior333
Messages postés192Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention30 janvier 2008 16 juil. 2007 à 19:13
Tu ne nous embêtes pas :)
En fait ton problème vient du fait que tu ne bases pas tes mouvements sur le temps. Toutes tes animations doivent évoluer en fonction du temps. Donc tu définis une vitesse pour la souris et tu calcules le nouvel angle par:
Mais ca fait la même chose qu'avant.
en fait la rotation se fait mais elle ne s'arrête plus.
En fait dés que la souris fait un mouvement la rotation ne s'arrête plus alors que moi je voudrais que la rotation s'arrête lorsque la souris ne bouge plus.
THEwarrior333
Messages postés192Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention30 janvier 2008 16 juil. 2007 à 20:13
Qu'est-ce que EtatSouris? Car s'il s'agit de la position de la
souris alors il est normal que ca ne s'arrete plus de tourner. Ton
mouvement doit être relatif à l'écart de position et non à la position
de la souris.
THEwarrior333
Messages postés192Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention30 janvier 2008 16 juil. 2007 à 20:24
OK DIMOUSESTATE ne donne pas directement les écarts de position
mais les positions absolues (etat.lX, etat.lY). Qu'à cela ne tienne, tu
peux les calculer toi-même ^^: tu procèdes de la même manière que pour
le temps écoulé. D'ailleurs n'oublies pas d'initialiser tes variables
temps1 et temps2 à zéro avant de les utiliser!
seb2086
Messages postés96Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention 1 février 2010 16 juil. 2007 à 20:48
/*---------------------------------------------------------------------------------------
Nom : NEC_Camera.cpp
Description : Classe permettant de gerer la camera
---------------------------------------------------------------------------------------*/
#include "NEF_Camera.h"
#define KEYDOWN(name, key) (name[key] & 0x80) // Macro permettant de tester l'appui ou non sur un touche
// Variables Globales
D3DXMATRIX CameraMatriceProjection ; // Matrice de projection
D3DXMATRIX CameraMatriceVision ; // Matrice de vision
/*---------------------------------------------------------------------------------------
Nom : NEC_Camera(void)
Description : Constructeur de la classe
---------------------------------------------------------------------------------------*/
NEC_Camera :: NEC_Camera(void)
{
CameraAngleX = 0.0f ;
CameraAngleY = 0.0f ;
}
/*---------------------------------------------------------------------------------------
Nom : ~NEC_Camera(void)
Description : Destructeur de la classe
---------------------------------------------------------------------------------------*/
NEC_Camera :: ~NEC_Camera(void)
{
}
/*---------------------------------------------------------------------------------------
Nom : void NE_CreerCamera(LPDIRECT3DDEVICE9 D3DDevice)
Description : Creation de la camera
---------------------------------------------------------------------------------------*/
void NEC_Camera :: NE_CreerCamera(LPDIRECT3DDEVICE9 D3DDevice)
{
// Creation de la matrice de projection :
// Angle d'ouverture de la camera : 45° , plan le proche : 0.1f , plan le plus eloigne : 1000.0f
D3DXMatrixPerspectiveFovLH(&CameraMatriceProjection, D3DXToRadian(45.0f), 640.0f / 480.0f, 0.1f, 100.0f) ;
// On applique la matrice
D3DDevice -> SetTransform(D3DTS_PROJECTION, &CameraMatriceProjection) ;
temps1 = GetTickCount() ;
difference = temps1 - temps2 ;
EtatSourisDifference.lX = EtatSouris.lX - EtatSourisSave.lX ;
//Variation de l'angle de la camera en fonction de la souris
//Regard à droite ou à gauche
//if(EtatSouris.lX & 0x80)
//{
//CameraAngleX -= EtatSouris.lX *0.0000000000002f ;
//CameraAngleX -= EtatSouris.lX *0.0000000000002f ;
// Calcul du vecteur cible en fonction des angles X et Y
CameraVecteurCible.x = CameraVecteurPosition.x + cosf(CameraAngleY) * cosf(CameraAngleX) ;
CameraVecteurCible.y = CameraVecteurPosition.y + sinf(CameraAngleY) ;
CameraVecteurCible.z = CameraVecteurPosition.z + cosf(CameraAngleY) * sinf(CameraAngleX) ;
//// Creation de la matrice de vision en fonction des vecteurs
D3DXMatrixLookAtLH(&CameraMatriceVision, &CameraVecteurPosition, &CameraVecteurCible, &CameraVecteurOrientation) ;
// On applique la matrice
D3DDevice -> SetTransform(D3DTS_VIEW, &CameraMatriceVision) ;
}
THEwarrior333
Messages postés192Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention30 janvier 2008 16 juil. 2007 à 21:00
EtatSourisSave.lX = 0 n'est pas bon: tu n'as pas a modifier un
champs d'une structure que tu n'as pas créée toi-même. Tu dois utiliser
ta propre variable. Pareil pour EtatSourisDifference.lX.
THEwarrior333
Messages postés192Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention30 janvier 2008 16 juil. 2007 à 21:23
LOL ben je sais plus quoi dire. Je regarderai mes codes ce soir
au retour du boulot (je suis au canada) mais je me souviens avoir pas
mal pompé sur DXUT.