Bonjour
J'essaye de déplacer ma caméra dans un environnement 3D, mais je pêche certainement par mécompréhension au niveau des vecteurs.
Je positionne mon vEyePt et calcule la position de mon vLookatPt en fonction d'un angle géré à la souris. En gros mon vLookatPt se promène sur une sphère autour du vEyePt. Voici le code associé :
Je souhaite désormais pouvoir me déplacer dans le sens que donne l'axe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 static float rotAngleX,rotAngleY; float rayon=10; if (g_fSpinX>0.0f) { rotAngleX+=D3DX_PI/40.0f; g_vLookatPt.x=g_vEyePt.x+rayon*sinf(rotAngleX); g_vLookatPt.z=g_vEyePt.z+rayon*cosf(rotAngleX); } else if (g_fSpinX<0.0f) { rotAngleX-=D3DX_PI/40.0f; g_vLookatPt.x=g_vEyePt.x+rayon*sinf(rotAngleX); g_vLookatPt.z=g_vEyePt.z+rayon*cosf(rotAngleX); } g_fSpinX=0.0f; // raz de delta x if (g_fSpinY>0.0f) { rotAngleY+=D3DX_PI/40.0f; g_vLookatPt.y=g_vEyePt.y+rayon*sinf(rotAngleY); g_vLookatPt.z=g_vEyePt.z+rayon*cosf(rotAngleY); } else if (g_fSpinY<0.0f) { rotAngleY-=D3DX_PI/40.0f; g_vLookatPt.y=g_vEyePt.y+rayon*sinf(rotAngleY); g_vLookatPt.z=g_vEyePt.z+rayon*cosf(rotAngleY); } g_fSpinY=0.0f; // raz de delta y D3DXMatrixLookAtLH( &g_matView, &g_vEyePt, &g_vLookatPt, &g_vUpVec ); // initialisation matrice de vue hr=g_lpD3DDevice->SetTransform( D3DTS_VIEW, &g_matView );
g_vEyePt--> g_vLookatPt
mais je n'arrive pas à trouver le calcul à éffectuer sur g_vEyePt pour me déplacer dans cette direction.
Il me semble clair que ce type de problème doit se résoudre avec des vecteurs, mais en refaisant des math, je n'arrive pas à m'en sortir.
A ce propos ce code est -il correct ?
Si oui comment l'utiliser pour mes déplacements ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 D3DXVECTOR3 vCam=g_vLookatPt - g_vEyePt; float rayon=10;//D3DXVec3Length(&vCam);
Y a t-il sinon une possibilité à partir de l'extraction des valeurs de la matrice D3DXMatrixLookAtLH
le sdk dit :
The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixLookAtLH function can be used as a parameter for another function.
This function uses the following formula to compute the returned matrix.
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l
Espèrant que quelqu'un puisse me débloquer,
merci d'avance
dom
Partager