平滑过渡到标准3D视图方向

时间:2012-09-26 09:54:01

标签: c++ math opengl c++11

目前,我有一种通过修改模型视图矩阵将视图定向到标准方向的机制 我希望通过提供平滑的动画来增强用户体验,该动画将使用户从当前视图方向到标准视图方向,并且平滑过渡 - > (恒定的方向变化率) 理想情况下,转换应该少于500毫秒。

我已经实施了以下内容。

  • 矩阵类
  • 四元数(我可以从中提取矩阵)

我可以提取当前的视图方向,并且我知道所有标准视图的视图方向。

我的问题:

  1. 是否允许用户在转换过程中进行交互并更改视图方向。我想是的,但不确定这种行为。无论系统状态如何,我都不希望应用程序冻结。
  2. 如何分别在开始和结束时保持加速和减速的恒定方向变化率。
  3. 转换过程中应如何呈现帧(500毫秒)。是否有一种优雅的方式 使用std :: thread在C ++ 11中执行此操作。

1 个答案:

答案 0 :(得分:2)

如果您在渲染时已经处理了用户输入,则不需要单独的线程。如果你希望用户仍然拥有控制权,那就不要让他们直接控制视图矩阵 - 而是让目标视图矩阵,并简单地将当前视图矩阵推向目标,即每帧的一部分。

这会使平滑的加速/减速变得复杂 - 比如,你开始时加速很小,加速,然后用户移动相机:你是以低速重新开始,还是继续相同?这是一个设计决定,但我认为如果视图在中途改变的速度旋转,控件会感觉很奇怪。另外 - 如果你有加速/减速,变化率根据定义不会是恒定的,所以你真的需要决定你想要什么,可能尝试两种解决方案,看看它是否“缺乏更好的短语”。