0

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

希望您能够帮助我。

4

1 回答 1

0

任何有关如何创建第一人称相机的文章都会对您有所帮助,例如Riemers XNA 教程 > 鼠标相机。这有你需要的东西,一个 leftRightRot 和一个 upDownRot 对应于偏航和俯仰。如果你需要滚动,你需要重新定位你的向上向量,但是一旦你完成了剩下的工作,这应该是微不足道的。

于 2012-05-04T14:17:35.793 回答