如何添加摄像头阻尼



我问了一个关于如何在Ogre中添加相机阻尼的问题,但没有得到任何答案,所以这是一个更模糊的问题。

您将如何添加相机阻尼?

我在谷歌上搜索了这个问题,并在XNA和Unity中得到了答案,每个都不同,所以我甚至无法弄清楚他们正在使用什么技术,函数或数学。

我有一个相机和

它的位置,我有一个物体和我希望相机所在的位置,并慢慢地将其移动到那个位置,我该怎么做?

我尝试使用 lerp 但它不起作用,我不知道这是错误的方法还是我的 lerp 函数可能是错误的,所以我不知道。

有人可以帮我吗?谢谢

这是我

的lerp函数

Ogre::Vector3 lerp (Ogre::Vector3 &sourceLocation, Ogre::Vector3 &destLocation, Ogre::Real Time)
        {
            return sourceLocation+ (destLocation - sourceLocation) * Time;
        }

在 CPP 文件中

this->camPos = this->lerp(this->camPos, this->playerNode->getSceneNode()->getPosition() + Ogre::Vector3(0,60,-100), 1000.0f);
this->getCamera()->setPosition(this->camPos);

但相机最终离物体只有几英里远

感谢您回答彼得。现在更有意义了,lerp 函数只是返回一个长向量,因为时间是恒定的,但我不确定第二部分。

我需要有一个随框架递增的变量吗?

Ogre::Real frametime += frame_event.timeSinceLastFrame * 0.01;
    this->camPos = this->lerp(this->camPos, this->playerNode->getSceneNode()->getPosition() + Ogre::Vector3(0,60,-100), frametime);

这确实会慢慢地将相机移向目标,然后停止,但由于帧时间在增加,到达目标目的地所需的时间也会变快。 我是否只是在到达目的地时将帧时间设置为 0?

你能解释一下第二部分吗?我真的很感激你的帮助。

谢谢

您对 lerp 的计算是问题所在,您获取 dest 和源之间的向量并大规模扩展它。您的 lerp 时间不应该是恒定的,它应该根据您要从源到目标的时间段从 0 扩展到 1。

搬家前:

浮点长度=(目标 - 开始)。长度();

更新 ()

浮点距离行进 = (当前时间 - 开始时间) * 相机速度;

浮子勒p = 行进距离/长度;

传递 lerp 以运行。

相机速度越快,速度越快

最新更新