0

我无法在指定范围内调整我的相机。目前,我的相机可以不受任何限制地围绕模型进行俯仰。我试图将 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;
        }
    }
4

1 回答 1

0

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

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

于 2012-10-16T07:17:29.437 回答