【问题标题】:limit pitch of camera between two values限制两个值之间的相机间距
【发布时间】:2012-10-14 02:18:24
【问题描述】:

我无法在指定范围内调整我的相机。目前,我的相机可以不受任何限制地围绕模型进行俯仰。我尝试将 Y 轴限制在 6 到 36 之间,但如果我继续俯仰,Z 轴将继续向前移动相机。

我正在使用控制器摇杆来控制移动。最终,我想要做的是:“如果相机与目标(模型)的角度超过我的极限角度,无论是否有更多的俯仰(人连续举起拇指杆或下)被应用。”

注意:这是第三人称相机

    public void cameraPitch(float pitch)
    {  
        cameraDirection = ModelLoad.CameraPos - ModelLoad.camTarget;
        axisPitch = Vector3.Cross(Vector3.Up, cameraDirection);

        // pitch constrained to model's orientation
        axisPitch.Normalize();

        ModelLoad.CameraPos = Vector3.Transform(cameraDirection,
            Matrix.CreateFromAxisAngle(axisPitch, pitch)) + ModelLoad.camTarget;

        if (ModelLoad.camPos.Y > 36.0f)
        {
            ModelLoad.camPos.Y = 36.0f;
        }

        if (ModelLoad.camPos.Y < 6.0f)
        {
            ModelLoad.camPos.Y = 6.0f;
        }
    }

【问题讨论】:

    标签: c# xna camera pitch


    【解决方案1】:

    它与相机在空间中的 X 或 Y 位置没有任何关系。要解决此问题,您需要将相机的总俯仰角存储在您的 ModelLoad 对象中,或者任何其他可以真正持续存在的位置。然后在将矩阵变换应用于相机的位置向量之前检查这个值,实际上,在做任何这些事情之前检查它......是的,所以如果当前的音高量等于 36,只需退出该方法而不做任何事情,如果不是,请旋转相机,不要忘记将这个新数量添加到总数中。

    我不太记得了,但我认为你传递给Matrix.CreateFromAxisAngle 的角度必须是弧度,对吧?所以不要检查 36,检查 36 转换为弧度。 (假装不知道哈哈)

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      相关资源
      最近更新 更多