Bonjour,
Je suis en train de faire un simulateur sous XNA et il m'arrive une bricole quand au rotation du modèle à simuler.
en effet, selon l'emplacement de la camera par rapport à celui-ci le centre de rotation (faite via des quaternion) sera translaté.
exemple en image :

c'est ce que j'ai quand la camera est situé "1" unité derrière le model (axe Y). quand la camera est pile dessus (en axe Y) il n'y a plus de problème pour cette rotation, pour toutes les autres rien n'est réglé.

Voici mon code pour la camera (update)
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
 
cameraRotation = Quaternion.Lerp(cameraRotation, quadrocopters[selectedQuad].getDrawingRotation(), 0.1f);
 
            Vector3 campos = new Vector3(-0.0f, 1f, -1.0f);
            campos = Vector3.Transform(campos, Matrix.CreateFromQuaternion(cameraRotation));
            campos += quadrocopters[selectedQuad].getDrawingPosition();
 
            Vector3 camup = new Vector3(0, 1, 0);
            camup = Vector3.Transform(camup, Matrix.CreateFromQuaternion(cameraRotation));
 
            viewMatrix = Matrix.CreateLookAt(campos, quadrocopters[selectedQuad].getDrawingPosition(), camup);
            float aspectRatio = ((float)displayWidth) / ((float)displayHeight);
            projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 0.2f, 100f);
 
            cameraPosition = campos;
            cameraUpDirection = camup;
et le draw de mon model :
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
 
Matrix worldMatrix = Matrix.CreateScale(0.07f, 0.07f, 0.07f) */*Matrix.CreateRotationY(MathHelper.PiOver2)* */  Matrix.CreateFromQuaternion(drawingRotation) * Matrix.CreateTranslation(drawingPosition);
 
            Matrix[] modelTransforms = new Matrix[model.Bones.Count];
            model.CopyAbsoluteBoneTransformsTo(modelTransforms);
 
            foreach (ModelMesh mesh in model.Meshes)
            {
                foreach (BasicEffect currentEffect in mesh.Effects)
                {
                    currentEffect.LightingEnabled = true;
                    //currentEffect.TextureEnabled = true;
                    currentEffect.EnableDefaultLighting();
                    currentEffect.World = (modelTransforms[mesh.ParentBone.Index] * worldMatrix);
                    currentEffect.View = viewMatrix;
                    currentEffect.Projection = Matrix.CreatePerspectiveFieldOfView(
                        MathHelper.ToRadians(45.0f), 1.0f,
                        1, 10000.0f);
 
                }
                mesh.Draw();
            }
Je ne sais pas si c'est lors du dessin qu'il y a un problème ou dans mes transformation mais je trouve très étrange (et génant) que la perspective modifie les rotations.

Quelqu'un à idée?
Merci d'avance.

EDIT : j'ai temporairement "résolu" problème en laissant ma camera statique dans la scene (plus de rotation etrange) mais cela ne règle pas totalement le problème.