XNA 3D相机&广告牌相机面对旋转

时间:2011-05-02 04:38:22

标签: xna

请帮我解决以下问题?

  1. 如何旋转(绕Z轴)围绕Vector3的摄影机位置作为支点?
  2. 如何旋转(绕Z轴)位于相机前方的四边形物体,并确保四边形始终面向相机< / strong>围绕同一个Vector3 pivot?
  3. 解释它的图片如下:

    Image showing the concept of a billboard

    请回答,谢谢

2 个答案:

答案 0 :(得分:1)

除了围绕vector3点旋转相机外,您还可以将其用作相机正在查看的目标。然后你只需要改变相机在该点附近的位置。看来用于制作相机的向上矢量将始终保持不变。你提到的是Z轴,但是XNA是一个Y-up系统,所以从图像中你可以绕Y轴进行旋转。

Vector3 pivotPoint = new Vector3(?, ?, ?);
cameraPosition = Vector3.Transform(cameraPosition - pivotPoint, Matrix.CreateRotationY(anglePerFrame)) + pivotPoint;
View = Matrix.CreatLookAt(cameraPosition, pivotPoint, Vector3.Up);

Matrix billboardWorld = Matrix.Identity;
billBoardWorld.Forward = Vector3.Normalize(cameraPosition - pivotPoint);
billboardWorld.Right = Vector3.Normalize(Vector3.Cross(billboardWorld.Forward, Vector3.Up));
billboardWorld.Translation = cameraPosition - (billboardWorld.Backwards * distFromCamera);

答案 1 :(得分:1)

请注意,XNA为此Matrix.CreateBillboard(...)提供了帮助,但是如果您可以访问相机矩阵,则可能更容易执行以下操作:

        var billboardWorld = Matrix.Invert(camera.ViewMatrix);
        billboardWorld.Translation = billboardPosition;