2017-06-17 109 views
2

您從CMAttitude獲得的四元數似乎有缺陷。在Unity中,我可以獲得iPhone的旋轉,將其應用於3D對象,並且在旋轉iPhone時對象將旋轉。在Xcode中,它似乎有所不同。將iPhone旋轉應用於3d對象

要建立一個快速的測試項目,請按照下列步驟操作:

  1. 在Xcode中,創建一個從iOS的一個新項目>遊戲模板(這給了我們一個3D物體上測試)。

  2. GameViewController.h添加#import <CoreMotion/CoreMotion.h>@property (strong, nonatomic) CMMotionManager *motionManager;

  3. GameViewController.m在線取出動畫:46 [ship runAction: etc..並且不允許相機控制在線路:55(不是必需的)

  4. GameViewController.m添加到的viewDidLoad中

    self.motionManager = [[CMMotionManager alloc] init]; 
    self.motionManager.deviceMotionUpdateInterval = .1; 
    
    [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] 
        withHandler:^(CMDeviceMotion *motion, NSError *error) { 
    
         CMQuaternion q = motion.attitude.quaternion; 
         ship.rotation = SCNVector4Make(q.x, q.y, q.z, q.w); 
    
         if(error){ NSLog(@"%@", error); } 
    } ]; 
    
  5. 底部。爲了避免煩惱,在項目>目標>項目名稱>部署信息>設備的方向,只允許人像(或只鎖定你的iPhone的旋轉)

當我建立這個,我的iPhone的3D對象(飛機)不跟隨手機的旋轉。投影類作品。

這是打算?我如何使用這個錯誤?

+0

使用'ship.orientation'而不是'ship.rotation'解決了這個問題。感謝@orangenkopf – Chris

回答

2

在3D空間中有不同的旋轉表示形式。 您正在使用的SCNNoderotation屬性:

的四組分旋轉矢量指定了第四前三部件的方向上的旋轉軸的 和 角度旋轉(弧度)。

但是您正在將設備輪轉分配爲quaternion

要麼四元分配給的SCNNodeorientation屬性或使用的CMAttitude偏航,俯仰和滾動角並將它們分配給的SCNNodeeulerAngles屬性:

節點的方向,表示爲俯仰,偏航和滾動角度,每個弧度爲 。