ローカル軸を編集せずに、モデルの起動時にモデルを90度回転させる必要があります。私はトンネルを90度横向きに飛んでいるミサイルを持っています、そして私はそれがその移動方向を維持しながらトンネルを下に向ける必要があります。私はもう試した:
virtual public void setOrientationWorld(float x, float y, float z)
{
mOrientation *= Matrix.CreateRotationX(MathHelper.ToRadians(x));
mOrientation *= Matrix.CreateRotationY(MathHelper.ToRadians(y));
mOrientation *= Matrix.CreateRotationZ(MathHelper.ToRadians(z));
}
setOrientationWorld(0、-90、0);
そして私は試しました:
virtual public void setOrientationLocal(float x, float y, float z)
{
mOrientation *= Matrix.CreateFromAxisAngle(mOrientation.Right, MathHelper.ToRadians(x));
mOrientation *= Matrix.CreateFromAxisAngle(mOrientation.Up, MathHelper.ToRadians(y));
mOrientation *= Matrix.CreateFromAxisAngle(mOrientation.Forward, MathHelper.ToRadians(z));
}
setOrientationLocal(0、-90、0);
しかし、それらは両方ともすべてを台無しにします。どちらかを行うと、ミサイルが回転し、すべての軸が変化します。setPosition(0,0、-1)を実行するだけでも、ZではなくワールドのX軸に沿って移動します。
私はミサイルをローカルとグローバルの両方で動かそうとしましたが、次のように役に立ちませんでした。
virtual public void moveLocal(float x, float y, float z)
{
mPosition += mOrientation.Right * x;
mPosition += mOrientation.Up * y;
mPosition += mOrientation.Forward * z;
}
と
virtual public void moveWorld(float x, float y, float z)
{
mPosition.X += x;
mPosition.Y += y;
mPosition.Z += z;
}
私が考えることができる他の唯一の関連することは、それと関係があるかもしれない描画関数です:
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = Matrix.Identity *
Matrix.CreateScale(mScale) *
transforms[mesh.ParentBone.Index] *
Matrix.CreateTranslation(mPosition) *
mOrientation;
effect.View = game1.getView();
effect.Projection = game1.getProjection();
}
Pls Halp!