如何添加摄像头阻尼
How to add camera damping?
我问了一个关于如何在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 以运行。
相机速度越快,速度越快
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 将图像添加到资源文件夹UWP C++
- 如何添加摄像头阻尼