![]() |
1
3
我会定义一个 动画 类,它可以实现以下动画:
当然,上面列出的动画技术之一需要对 对象 班级。 轮转翻译 动画需要访问 对象 模型视图矩阵; 关键帧 动画需要访问模型顶点缓冲区; 剥皮 动画需要访问 对象 (材质球属性和程序,或使用扩展的顶点属性)。 除剥皮外,还应执行通用值(浮点、向量或矩阵)的插值,以便使用插值公式(与genpfault链接的公式相同)更改值。所以一个 插补器 类应能轻松引入新的插值方程。 动画类使用一组 插补器 执行动画的实例(更改要插值的值)。如何选择、访问和修改值(范围),应在 对象 班级。 在这一点上,必须有一个 时间线 类,该类定义已用时间(不能是实际时间),该类触发 动画 实例(或者可能是 插补器 实例)使插值值前进中间值。 这个 动画 实例在上排队 时间线 类,所以它知道 动画 实例处于活动状态。激活可能是由用户输入或以编程方式使用内部生成的事件引起的。终止 动画 执行 动画 类可以定义 被阉割的 方法是从 时间线 实例(可能是 动画 可以循环动画以获得连续动画)。 当然,一切都取决于你的实际需求。 在动画计算可能需要很长时间的情况下,可以缓存整个模型数据并在单独的线程中运行动画。一旦终止,模型就可以被更新,从而阻塞渲染循环。 但是,我会考虑通过向着色程序发出适当的数据来内联动画处理,从而允许更快的计算,这可以提高系统性能。 |
![]() |
2
4
就“流畅和快速”而言,您可能希望了解 easing equations 应用于动画插值值。 |
![]() |
3
1
OpenGL不支持动画;您需要编写自己的框架(例如使用GLX, see this article )或使用现有框架,如 ones mentioned here . |