我正在创建一个展示游戏,它使用手机的传感器在 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);
}
}
希望您能够帮助我。