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 :
(Ca c'est du schéma )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 +-Form-----------------------------+ |+-View---------------------------+| || || || || || | || || -+- || || | || || || || || || || |+-Status Bar---------------------+| || || +----------------------------------+
Et le code de ma methode. Mon probleme semble résider entre la ligne 18 et 21.
Merci d'avance pour votre aide,
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
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 }
aegypius.
IDE : #Developp 1.0 RC3
.Net Framework : 1.1
Partager