我是 XNA 的新手,我正在创建一个简单的游戏。抱歉,这可能真的很简单,但我找不到任何帮助。游戏中有一艘船是我用 Blender 制作的,我希望能够通过旋转船的 X、Y 和 Z 轴来控制这艘船。这是我的代码:
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();
}
}
这将旋转船,但不会沿着船的轴旋转。如果我旋转 Y 轴(通过改变 rotationY 的值),船将沿其 Y 轴旋转。但是如果我旋转 X 或 Z 轴,船会根据世界的 X 和 Z 轴旋转,而不是它自己的。我怎样才能让船绕着自己的轴旋转?我需要对矩阵做一些不同的事情吗?谢谢