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)
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 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;
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.
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(); }
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.
Partager