我问了一个关于如何在Ogre中添加相机阻尼的问题,但没有得到任何答案,所以这里是一个更模糊的问题。
您如何添加相机阻尼?
我用Google搜索了这个问题,并在XNA和Unity中得到了答案,每个都与另一个不同,所以我甚至无法弄清楚他们正在使用什么技术,功能或数学。
我有一个相机及其位置,我有一个物体和我想要相机的位置,然后慢慢移动到那个位置,我该怎么做?
我尝试使用lerp但它没有用,我不知道这是不是这样做或我的lerp功能可能是错的所以我不知道。
有人可以帮帮我吗。谢谢
答案 0 :(得分:0)
这是我的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);
但是相机距离物体只有几英里
答案 1 :(得分:0)
你对lerp的计算是个问题,你在dest和source之间获得向量并大量扩展它。 你的lerp时间不应该是恒定的,它应该根据你想要从源到dest的时间段从0缩放到1。
搬家之前:
float length =(dest -start).Length();
更新()
float distancedTravelled =(CurrentTime - StartTime)* cameraSpeed;
float lerp = distanceTravelled / length;
将lerp传递给函数。
更快的摄像机速度
答案 2 :(得分:0)
感谢您回答彼得。现在更有意义,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?
请你详细解释第二部分。我真的非常感谢你的帮助。
谢谢