電話のセンサーを使用して 3D ゲームの世界を見回すショーケース ゲームを作成しています。近くの敵を表示するレーダーをxnaで作成したいと思います。MotionReader の回転行列を使用します。RotationMatrix でこれを計算するにはどうすればよいですか? コンパス (見出し) を使用して y 回転行列を作成するときのしくみを知っています。
Matrix rotation = Matrix.CreateRotationY(MathHelper.ToRadians((float)trueHeading));
EffectRadar.View = rotation * Matrix.CreateLookAt(new Vector3(0, 1.1f, 0), new Vector3(0, -1, 0), new Vector3(0, 0, -1));
私はモーションリーダーを使用しているので、デバイスにジャイロスコープがあり、コンパスの見出し用に独自のフィルターを作成したくない場合は、より良い値が得られます。
私はこれを試しましたが、電話を投げるとうまくいきません:
Matrix rotation = Matrix.CreateRotationX(MathHelper.PiOver2) * motion.CurrentValue.Attitude.RotationMatrix;
EffectRadar.View = Matrix.CreateLookAt(new Vector3(0, 1.1f, 0), new Vector3(0, -1, 0), new Vector3(0, 0, -1));
EffectRadar.Projection = Matrix.CreateOrthographic(FarClippingDistance / 2.0f, FarClippingDistance / 2.0f, 1.0f, 10.0f);
foreach (Opponent item in opponentList){
Vector3 vecProj = RadarViewport.Project(new Vector3(item.Position.X, 0.0f, item.Position.Z),
EffectRadar.Projection,
rotation,
Matrix.Identity
);
EffectRadar.World = Matrix.CreateTranslation(vecProj.X, 0.0f, vecProj.Z);
foreach (EffectPass pass in EffectRadar.CurrentTechnique.Passes)
{
pass.Apply();
GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.TriangleStrip, VerticesColorRed, 0, 2);
}
}
あなたが私を助けてくれることを願っています。