1.随着时间改变一个渲染场景的可视内容就会产生图形动画。
2.变化坐标系会产生一个场景内的移动效果。
3.改变顶点数据会产生类似水波荡漾和随风飘摇的旗帜效果。
4.变化颜色和灯光可以模拟出很多电影氛围。
5.改变纹理坐标系可以动画化几何体的纹理映射过程,变化纹理数据可以产生类似电影的效果。
6.动画的关键是随着时间的流逝管理时间并执行应用逻辑。
7.GLKViewController的-update方法会自动按照配置周期律被调用,此函数调用和视图绘制与显示刷新同步。
8.显示刷新率通常依赖于嵌入式设备的硬件,显示刷新率确定了屏幕像素的颜色每秒可以变化的最大次数。
9.GLKViewController的update, -(void)glkView:(GLKView*)view drawInRect:(CGRect)rect,以及GLKView的- drawRect方法为应用实现动画提供了完美的触发器。
10.让一个渲染场景的可视内容的变化速度快于显示刷新率没有任何意义,用户只能看到在显示刷新之前的最后一次更新。
6.1.1
动画通常包含两种情况,对象相对于用户视点移动或者用户的视点相对于对象的移动。
与很多3D图像概念相似,视点存在于一个抽象的数学领域中。实际上,当前的openGLES视点永远不会变。矩阵定义了几何对象是怎么映射到像素颜色渲染缓存中的片元位置的。改变矩阵进而改变映射,最终创建了视点变化的错觉。
6-1例子中每辆车始终在自己坐标原点{0,0, 0}处,当其本地坐标系相对于用来渲染其他碰碰车和游乐场的坐标系发生变化时,碰碰车就在场景内来回移动。
GLKMatrix4GLKMatrix4MakeLookAt(float eyeX, float eyeY, float eyeZ,
float centerX, float centerY, float centerZ,
float upX, float upY, float upZ)
eyeX, eyeY, eyeZ指定观察者眼镜位置
centerX, centerY, centerZ是看向的位置
6.1.2
以上函数通过一个低通滤波器给视点切换提供了一个平滑动画。
在这个方法中设置碰碰车颜色,平移model-view坐标系到当前位置,旋转坐标系以匹配碰碰车的当前偏航角,并绘制碰碰车模型。
6.2