12.3、设备动作

Cocoa Touch 包含了Core Motion框架,这个框架提供了CMMotionManager类,详情请访问: https://developer.apple.comibrayUMTATIONCorMoti Reference/CoreMotion_Reference/_index.html 。例子OpenGLES_Ch12_1中的OpenGLES_Ch12_1ViewController类的-viewDidLoad方法中使用下面的代码初始化了他的motion-Manager属性并启动了周期性的动作更新。


   self.motionManager = [[CMMotionManager alloc] init];
   [self.motionManager startDeviceMotionUpdates];

OpenGLES_Ch12_1ViewController实现了viewDidUnload方法以终止动作更新并把motionManager属性设置为nil

  [self.motionManager stopDeviceMotionUpdates];
   [self.motionManager stopAccelerometerUpdates];
   self.motionManager = nil;
   self.particleManager = nil;

较旧的iOS设备的硬件并不能检测到所有的动作。当比较精准的动作检测器不可用时,OpenGLES_Ch12_1ViewController的- (void)updatePlayerCartForDeviceMotion方法会退而使用但不是太准确的加速计硬件。

- (void)updatePlayerCartForDeviceMotion
{
   TECart *playerCart = [self playerCart];

   // Update cart direction based on device motion inputs
   if(self.motionManager.isDeviceMotionActive)
   {
      self.rollAngleRadians = TEDeviceRotationFactor *
         self.motionManager.deviceMotion.attitude.pitch;
   }
   else
   {  // Use device accelerometer when other sources unavailable
      if(!self.motionManager.isAccelerometerActive)
      {
         [self.motionManager startAccelerometerUpdates];
      }

      self.rollAngleRadians = -TEDeviceRotationFactor *
         self.motionManager.accelerometerData.acceleration.y;
   }

   [playerCart turnDeltaRadians:self.rollAngleRadians];
}

图12-5显示了用来控制玩家的火箭车的设备动作。CMMotionManager把设备绕着指出屏幕的坐标轴的旋转定为了“俯仰”。加速计把指出设备屏幕的坐标轴定为了“Y”。因此,如果可能的话,“-updatePlayerCartForDeviceMotion” 会获取设备attitude的俯仰变化,否则会获取绕着设备Y轴的旋转加速度。

术语attitude描述了一个对象就俯仰、滚转和偏航三个角度而言的方向。如果一个对象”有一个定为“前”的方向,那么滚转是指绕着指向前的轴的旋转。偏航是指绕着指向上的轴的旋转。俯仰是指绕着与前和上都垂直的方向的轴的旋转。 维基百科提供了一个图解,以及一些使用飞机来演示俯仰、滚转和偏航的动画,详情请访问: http://en.wikipedia.org/wiki/Yaw, pitch_and_roll。

图 12-5

12.4 小结

本章挨个介绍了计算机图形的概念,最后用一个比较综合的例子包含了几乎所有涉及的主题。苹果公司在Cocoa Touch框架中使用了MVC软件结构,大部分iOS应用也应该采用MVC结构。其他熟悉CocoaTouch的程序员所期望的一个组织形式是把类和其他的源代码划分成模型、视图和控制器子系 统。例子OpenGLES_Ch12_1就是受益于MVC组织形式所提倡的去耦化。

很多经验丰富的图形程序员年复一年积累了很多可重用代码库。无须从基本原理开始一步一步地创建一个新工程的每个高级功能。尽管如此,对于所涉及技术的理解仍然是很重要的。从类似GLKit的高级框架开始启动一个工程有很多好处,会让你成为一个多产的程序员,但可能也会缺少对于理论和实践的理解。理解了底层技术,那么类似GLKit和第三方游戏引擎的高级框架使用起来也更容易。通常,程序员是最讨厌神秘的 一类人。知道所有东西是怎么结合到一起的是非常重要的。

最后,iOS设备屏幕上的每个像素颜色都是由GPU控制的,而GPU是使用标准的OpenGL ES 2.0编程接口控制的。苹果公司的Core Animation框架和GLKit简化了很多常见的图形编程任务,并且不会影响对于底层OpenGL ES 2.0函数的访问。本书讲解了怎么使用GLKit和Core Animation层来渲染3D图形,但是更重要的是,本书提供了对于GLKit实现的深人理解,以及与Core Animation的相互作用。使用这些知识去实现你自己的创意吧!

results matching ""

    No results matching ""