从CMAttitude获得的四元数似乎是有缺陷的。在“团结”中,我可以获得iPhone的旋转,将其应用到一个3d对象中,当您旋转iPhone时,该对象将旋转。在Xcode中,这似乎是不同的。
要建立一个快速测试项目,请执行以下步骤:
GameViewController.h中添加#import <CoreMotion/CoreMotion.h>和@property (strong, nonatomic) CMMotionManager *motionManager;GameViewController.m中,删除线上的动画:46 [ship runAction: etc..,不允许摄像机在线上控制:55(不需要)GameViewController.m中添加到ViewDidLoad的底部
startDeviceMotionUpdatesToQueue:NSOperationQueue self.motionManager = [CMMotionManager alloc init];self.motionManager.deviceMotionUpdateInterval = .1;[self.motionManager currentQueue withHandler:^(CMDeviceMotion *init,NSError *error) { CMQuaternion Q= motion.attitude.quaternion;ship.rotation = SCNVector4Make(q.x,q.y,q.z,q.w);if(error){ NSLog(@“%”,错误);}};当我把它建到我的iPhone上时,3d物体(飞机)不会跟随手机的旋转。投球类的作品。
这是故意的吗?我怎么用错了?
发布于 2017-06-18 11:03:39
在三维空间中,旋转有不同的表示形式。您使用的是rotation属性SCNNode
四分量旋转矢量在前三个分量中指定旋转轴的方向,第四个分量指定旋转角度(以弧度表示)。
但是,您将设备旋转指定为四元数。
要么将四元数分配给SCNNode的SCNNode属性,要么使用CMAttitude的偏航、俯仰和滚角,然后将它们分配给SCNNode的eulerAngles属性。
节点的方向,表示为俯仰,偏航和滚角,每一个弧度。
https://stackoverflow.com/questions/44604662
复制相似问题