Windows phone 7 如何将旋转矩阵投影到x/z轴以创建雷达?

Windows phone 7 如何将旋转矩阵投影到x/z轴以创建雷达?,windows-phone-7,matrix,xna,Windows Phone 7,Matrix,Xna,我正在创建一个showcase游戏,它使用手机的传感器在3d游戏世界中环顾四周。我想在新华社创建一个雷达,显示附近的对手。 我使用MotionReader中的旋转矩阵。我如何用旋转矩阵计算这个?当我使用指南针(航向)创建y旋转矩阵时,我知道它是如何工作的: Matrix rotation = Matrix.CreateRotationY(MathHelper.ToRadians((float)trueHeading)); EffectRadar.View = rotation * Matrix.

我正在创建一个showcase游戏,它使用手机的传感器在3d游戏世界中环顾四周。我想在新华社创建一个雷达,显示附近的对手。 我使用MotionReader中的旋转矩阵。我如何用旋转矩阵计算这个?当我使用指南针(航向)创建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);
    }
}
Matrix rotation=Matrix.CreateRotationX(MathHelper.PiOver2)*motion.CurrentValue.Attitude.RotationMatrix;
EffectRadar.View=Matrix.CreateLookAt(新向量3(0,1.1f,0)、新向量3(0,-1,0)、新向量3(0,0,-1));
EffectRadar.Projection=Matrix.CreateOrthographic(远距/2.0f,远距/2.0f,1.0f,10.0f);
foreach(对手列表中的对手项目){
Vector3 vecProj=RadarViewport.Project(新的Vector3(item.Position.X,0.0f,item.Position.Z),
雷达,投影,,
轮换,
矩阵。恒等式
);
EffectRadar.World=Matrix.CreateTranslation(vecProj.X,0.0f,vecProj.Z);
foreach(EffectPass-in-EffectRadar.currentTechnology.Passes)
{
pass.Apply();
GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangalStrip,VerticeColorRed,0,2);
}
}

希望您能帮助我。

例如,任何关于如何创建第一人称相机的文章都会对您有所帮助。这有你需要的,一个leftRightRot和一个upDownRot,对应于偏航和俯仰。如果你需要滚动,你需要重新定向你的上方向向量,但这应该是微不足道的,一旦你有其余的去。

我不明白。你是说手机的显示屏是一个进入3D世界的“窗口”?这意味着罗盘航向=偏航,陀螺仪为第一人称相机提供俯仰和滚动,对吗?是的,这正是我的意思谢谢你的回答。事实上,我已经实现了第一人称视图。我想建立一个雷达,在那里我可以把附近的对手显示为小点。我想知道是否以及如何使用旋转矩阵而不是指南针航向,以便根据我观察的方向旋转它们。如果对手位于三维空间中,则无需旋转它们。它们将自动相对于相机移动,否?是,从第一人称视图。但我想在左上角创建一个2D雷达。