限制两个值之间的相机间距

时间:2012-10-14 02:18:25

标签: c# xna camera pitch

我无法在指定范围内投放相机。目前,我的相机可以在没有任何限制的情况下绕过模型。我试图将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;
        }
    }

1 个答案:

答案 0 :(得分:0)

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

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