Bonjour

Le logiciel sur lequel je travaille affiche des modèles 3D. Je veux gérer la caméra comme dans un logiciel de CAO.

C'est à dire:
- la translation est en repère caméra (les objets bougent dans un plan // à l'écran)
- la rotation se fait autour d'un point, qui bouge avec la caméra (le centre de l'écran, à une distance fixe)

J'arrive à obtenir une condition, ou l'autre mais jamais les deux en même temps.
Soit je translate correctement, mais la rotation est autour du point (0, 0, 0) du modèle (avec le code ci-dessous)
Soit la rotation est correcte, mais je translate en repère objet, et non caméra (en inversant la translation et la rotation ci-dessous)


Voici un code simplifié (je suis en VB.NET avec OpenTK)
Code vb : 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
52
53
54
55
 
Private Sub Render()
 
            GL.LoadIdentity()
 
            GL.MultMatrix(lookAtMat_)
            GL.MultMatrix(transMat_)
            GL.MultMatrix(rotMat_)
 
 
            DrawModel()
 
End Sub
 
Private Sub ResetView()
            camPos_.X = eyeX
            camPos_.Y = avgY
            camPos_.Z = avgZ
 
            centerPos_.X = avgX
            centerPos_.Y = avgY
            centerPos_.Z = avgZ
 
            upVec_.X = 0
            upVec_.Y = 0
            upVec_.Z = 1
 
 
            lookAtMat_ = Matrix4.LookAt(camPos_, centerPos_, upVec_)
 
            transMat_ = Matrix4.Identity
            rotMat_ = Matrix4.Identity
 
End Sub
 
Private Sub MouseMove(...)
 
deltaX = ...
deltaY = ...
 
Dim m As Matrix4
 
if move then
 
            Matrix4.CreateTranslation(0, deltaX / 2, -deltaY / 2, m)
            transMat_ = transMat_ * m
else
 
            Dim m1 As Matrix4 = Matrix4.CreateRotationZ(0.005 * deltaX)
            Dim m2 As Matrix4 = Matrix4.CreateRotationY(0.005 * deltaY)
            m = m1 * m2
            rotMat_ = rotMat_ * m
end if
 
End Sub

Je comprends pourquoi j'obtiens ces resultats, mais je ne sais pas comment arriver à ce que je souhaite.

Merci d'avance !