Soy nuevo en XNA y estoy creando un juego simple. Perdón por que esto sea muy simple, pero no puedo encontrar ayuda. Hay un barco en el juego que hice con Blender, y quiero poder controlar la nave al poder rotar los ejes X, Y y Z del barco. Aquí está el código que tengo:Girar modelo 3D en XNA
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
RotationMatrix = Matrix.CreateRotationY(MathHelper.PiOver2) * Matrix.CreateRotationY (rotationY) * Matrix.CreateRotationX(rotationX) * Matrix.CreateRotationZ(rotationZ);
Matrix shipTransformMatrix = RotationMatrix * Matrix.CreateTranslation(ship.Position);
DrawModel(ship.Model, shipTransformMatrix, ship.Transforms);
// TODO: Add your drawing code here
base.Draw(gameTime);
}
public void DrawModel(Model model, Matrix modelTransform, Matrix[] absoluteBoneTransforms)
{
//Draw the model, a model can have multiple meshes, so loop
foreach (ModelMesh mesh in model.Meshes)
{
//This is where the mesh orientation is set
foreach (BasicEffect effect in mesh.Effects)
{
effect.World = absoluteBoneTransforms[mesh.ParentBone.Index] * modelTransform;
effect.Projection = projectionMatrix;
effect.View = viewMatrix;
}
//Draw the mesh, will use the effects set above.
mesh.Draw();
}
}
Esto rotará la nave, pero no a lo largo del eje de la nave. Si giro el eje Y (cambiando el valor de rotación Y), la nave rotará a lo largo de su eje Y. Pero si giro el eje X o Z, la nave gira de acuerdo con los ejes X y Z del mundo, no los suyos. ¿Cómo lo hago para que la nave gire sobre sus propios ejes? ¿Debo hacer algo diferente con las matrices? Gracias
Gracias. ¿Cómo puedo definir el eje de rotación de mi nave en CreateFromAxisAngle? Lo intenté, y todo lo que hizo fue transformar mi nave. ¿Cómo almaceno una rotación en una matriz? Eso es lo que he estado tratando de hacer. – davidsbro
Da la casualidad de que escribí una publicación en el blog al respecto. http://stevehazen.wordpress.com/2010/02/15/matrix-basics-how-to-step-away-from-storing-an-orientation-as-3-angles/ –
Gracias. Encontré el enlace que colocaste justo antes de subirlo. lol. Lo leí y pude solucionar el problema. ¡Gracias! Fue muy claro y realmente útil – davidsbro