[C#] Problème de centrage de la souris dans un formulaire.
Bonjour,
Voila, je developpe actuellement un moteur de rendu 3D temps réel, je suis en ce moment sur la gestion de la camera et j'ai un soucis qui me dépasse.
J'explique ...
Ma camera est déplacée à la maniere de certains jeux, c'est à dire à la premiere personne (FPS). Je travaille donc en calculant la direction du vecteur de déplacement de la souris en fonction du centre de la fenêtre.
En plein écran ca fonctionne à merveille. Par contre, des lors qu'on passe en fenêtré, là ca se ne fonctionne plus vraiment comme esperé, la souris est position un tout petit peu à côté du centre et donc la camera tourne lentement.
Ce comportement est différent selon les différents themes appliqués sur Windows XP.
Enfin voila je bloque et je vois pas comment me sortir de ce probleme.
Afin de vous aider un peu voici la structure hiérarchique de mon formulaire :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
+-Form-----------------------------+
|+-View---------------------------+|
|| ||
|| ||
|| | ||
|| -+- ||
|| | ||
|| ||
|| ||
|| ||
|+-Status Bar---------------------+|
|| ||
+----------------------------------+ |
(Ca c'est du schéma :D )
Et le code de ma methode. Mon probleme semble résider entre la ligne 18 et 21.
Code:
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 39 40 41 42 43 44 45 46 47 48 49 50 51
|
01 private void SetMouseLook()
02 {
03 //Mouse Look
04 if(camera.MouseLook)
05 {
06 //Cursor.Hide();
07 point mousePos;
08 int middleX = vApplication.Form.Width >> 1;
09 int middleY = vApplication.Form.Height >> 1;
10 float angleY = 0.0f;
11 float angleZ = 0.0f;
12
13 // Get Mouse Current Position
14 mousePos.x = Mouse.iX;
15 mousePos.y = Mouse.iY;
16
17 // Reset the Mouse Position
18 if(vApplication.isFullscreen)
19 Cursor.Position = new Point(vApplication.Form.Left + middleX ,vApplication.Form.Top + middleY);
20 else
21 Cursor.Position = new Point(vApplication.Form.Left + middleX +4 ,vApplication.Form.Top + middleY + 25);
22
23 // Get Mouse Direction
24 angleY = (float)((middleX - mousePos.x)) / 1000.0f;
25 angleZ = (float)((middleY - mousePos.y)) / 1000.0f;
26
27 lastRotX = currentRotX;
28 currentRotX += angleZ;
29
30 if(currentRotX > 1.0f)
31 {
32 currentRotX = 1.0f;
33 if(lastRotX != 1.0f)
34 {
35 vVector vAxis = camera.view - camera.position;
36 vAxis.Cross(camera.up);
37 vAxis.Normalize();
38 camera.Rotate(-1.0f,vAxis.X,(Mouse.isInverted ? vAxis.Y : -vAxis.Y),vAxis .Z);
39 }
40 }
41 else
42 {
43 vVector vAxis = camera.view - camera.position;
44 vAxis.Cross(camera.up);
45 vAxis.Normalize();
46 camera.Rotate(angleZ,vAxis.X,(Mouse.isInverted ? vAxis.Y : -vAxis.Y),vAxis .Z);
47 }
48 camera.Rotate(angleY,0,1,0);
49 }
50 } |
Merci d'avance pour votre aide,
aegypius.
IDE : #Developp 1.0 RC3
.Net Framework : 1.1