我问了一个关于如何在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 以运行。
相机速度越快,速度越快