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 : 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---------------------+|
||                                ||
+----------------------------------+
(Ca c'est du schéma )

Et le code de ma methode. Mon probleme semble résider entre la ligne 18 et 21.
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	}
Merci d'avance pour votre aide,

aegypius.
IDE : #Developp 1.0 RC3
.Net Framework : 1.1