Bon hier j'avais un soucis pour déterminer la position 3D de la souris sur un plan orienté par une rotation suivant X et Y
finalement j'ai trouvé :
Maintenant, plus compliqué, quand je déplace la souris avec le bouton enfoncé, je voudrais que mon point 3D suive la souris 2D...et que donc mes rotations soient ajustées de tel sorte que le point déterminé ci-dessus se retrouve sous la souris !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SinCos(FRotateX * PI/180,sx,cx); SinCos(FRotateY * PI/180,sy,cy); w := ClientWidth div 2; h := ClientHeight div 2; tx := x - w; ty := y - h; if cy<>0 then tx := tx / cy; if cx<>0 then ty := (ty - sx * sy * tx) / cx; x3D := w + Round(tx); y3D := h + Round(ty);
là encore c'est facile pour un des deux axes, mais plus compliqué pour l'autre
pour FRotateY c'est relativement facile
comme j'ai déjà détermine FRotateY, il me reste une équation de type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 w := ClientWidth div 2; h := ClientHeight div 2; // sachant que // x = X3D * cos(FRotateY*PI/180) FRotateY := ArcCos( Clamp((x-w)/(x3D-w),-1,+1) ) * PI/180; // maintenant // y = Y3D * cos(FRotateX*PI/180) + X2D * Sin(FRotateX*PI/180) + Cos(FRotateY*PI/180); FRotateX := ????
a * cos(x) + b * sin(x) = c
j'essai ceci mais le résultat n'est pas génial
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 a := (Y3D - h); b := (X3D - w)* sin(FRotateY*PI/180); c := (y-h); d := b/a; FRotateX := (ArcCos( Clamp(c*cos(d)/a,-1,+1) ) + d) * 180/PI;
Partager