私は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();
}
}
これにより船は回転しますが、船の軸に沿って回転することはありません。(rotationYの値を変更して)Y軸を回転させると、船はY軸に沿って回転します。しかし、X軸またはZ軸を回転させると、船はそれ自体ではなく、世界のX軸とZ軸に従って回転します。船が独自の軸を中心に回転するようにするにはどうすればよいですか?行列で何か違うことをする必要がありますか?ありがとう