如何添加相机阻尼?

时间:2013-12-30 22:17:32

标签: c++ spring camera ogre

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

您如何添加相机阻尼?

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

我有一个相机及其位置,我有一个物体和我想要相机的位置,然后慢慢移动到那个位置,我该怎么做?

我尝试使用lerp但它没有用,我不知道这是不是这样做或我的lerp功能可能是错的所以我不知道。

有人可以帮帮我吗。谢谢

3 个答案:

答案 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?

请你详细解释第二部分。我真的非常感谢你的帮助。

谢谢