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é :
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 );
Je souhaite désormais pouvoir me déplacer dans le sens que donne l'axe

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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
D3DXVECTOR3 vCam=g_vLookatPt - g_vEyePt;
	float rayon=10;//D3DXVec3Length(&vCam);
Si oui comment l'utiliser pour mes déplacements ?

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