第6章 动画

随着时间改变一个渲染场景的可视内容就会产生图形动画。变化坐标系会产生一个场景内的移动效果。改变顶点数据会产生类似水波荡漾和随风飘摇的旗帜的效果。变化颜色和灯光可以模拟出很多电影氛围。改变纹理坐标系可以动画化几何体的纹理映射过程,变化纹理数据可以产生类似电影的效果。

动画的关键是随着时间的流逝管理时间并执行应用逻辑。GLKit的GLKView-Controller类提供了灵活的时间支持。控制器的“-update”方法会自动按照配置周期率被调用。紧随“-update”函数的调用,控制器的视图会被重绘。最重要的是,GLKViewController会让“-update”函数的调用和视图的绘制与显示刷新同步。

显示刷新率通常依赖于嵌人式设备的硬件,显示刷新率确定了屏幕像素的颜色每秒可以变化的最大次数。因此,GLKViewController的“-update”、 GLKView 的“-drawInRect:”和GLKView的delegate(委托)方法“-glkView:drawInRect:”为应用实现动画提供了完美的触发器。让一个渲染场景的可视内容的变化速度快于显示刷新率没有任何意义,用户只能看到在显示刷新之前的最后一次更新。

GLKViewController的timeSinceL astUpdate、timeSinceLastDraw、timeSinceLastResume 和timeSinceFirstResume属性会以秒和秒的一部分为度量保存时间间隔。时间信息控制动画。例如,如果一个几何对象每秒移动模拟的5厘米,那么timeSinceLastUpdate时间乘以5厘米就确定了对象在这次位置更新中需要移动多远。GLKViewController的paused属性控制更新是否暂停,framesDisplayed属性保存了自应用启动以来显示更新的总次数。

本章的所有例子都使用GLKViewController来实现时间以及与iOS功能的整合,比如自动显示方向变化。如果你好奇GLKViewController是怎么工作的,请浏览下在例子OpenGLES_Ch2_2 和OpenGLES_Ch5_3中包含的自定义AGLKViewController类,这个类使用苹果的一个CoreAnimation类(即CADisplayLink类)部分地重新实现了GLKViewController的时间功能。如第2章讲解的,Core Animation最终通过在硬件显示刷新时切换OpenGLES的前帧缓存和后帧缓存来控制渲染场景的显示。Core Animation的CADisplayLink会计算GLKViewController所使用的时间信息。

results matching ""

    No results matching ""