iPhone 应用于 3d 对象的旋转
iPhone rotation applied to a 3d object
您从 CMAttitude 获得的四元数似乎有缺陷。在 Unity 中,我可以获得 iPhone 的旋转,将其应用于 3d 对象,并且该对象将随着 iPhone 的旋转而旋转。在Xcode好像不一样。
要设置快速测试项目,请按照下列步骤操作:
在 Xcode 中,从 iOS > 游戏模板 创建一个新项目(这给了我们一个 3d 对象来测试上).
在GameViewController.h
中添加#import <CoreMotion/CoreMotion.h>
和@property (strong, nonatomic) CMMotionManager *motionManager;
在 GameViewController.m
中删除 line:46 [ship runAction: etc..
处的动画并且不允许 line:55 处的相机控制(不需要)
在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); }
} ];
为了避免麻烦,在项目 > 目标 > 项目名称 > 部署信息 > 设备方向中,只允许纵向(或者只锁定你的 iPhone的旋转)
当我将它构建到我的 iPhone 时,3d 对象(飞机)不跟随 phone 的旋转。投球类作品。
这是故意的吗?我怎么用错了?
在 3D 中 space 有不同的旋转表示。
您正在使用 rotation
属性 of SCNNode
:
The four-component rotation vector specifies the direction
of the rotation axis in the first three components and the
angle of rotation (in radians) in the fourth.
但是您将设备旋转分配为 quaternion。
要么将四元数赋给SCNNode
的orientation
property of SCNNode
or use the yaw, pitch and roll angles of CMAttitude
and assign these to the eulerAngles
属性:
The node’s orientation, expressed as pitch, yaw, and roll angles,
each in radians.
您从 CMAttitude 获得的四元数似乎有缺陷。在 Unity 中,我可以获得 iPhone 的旋转,将其应用于 3d 对象,并且该对象将随着 iPhone 的旋转而旋转。在Xcode好像不一样。
要设置快速测试项目,请按照下列步骤操作:
在 Xcode 中,从 iOS > 游戏模板 创建一个新项目(这给了我们一个 3d 对象来测试上).
在
GameViewController.h
中添加#import <CoreMotion/CoreMotion.h>
和@property (strong, nonatomic) CMMotionManager *motionManager;
在
GameViewController.m
中删除 line:46[ship runAction: etc..
处的动画并且不允许 line:55 处的相机控制(不需要)在
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); } } ];
为了避免麻烦,在项目 > 目标 > 项目名称 > 部署信息 > 设备方向中,只允许纵向(或者只锁定你的 iPhone的旋转)
当我将它构建到我的 iPhone 时,3d 对象(飞机)不跟随 phone 的旋转。投球类作品。
这是故意的吗?我怎么用错了?
在 3D 中 space 有不同的旋转表示。
您正在使用 rotation
属性 of SCNNode
:
The four-component rotation vector specifies the direction of the rotation axis in the first three components and the angle of rotation (in radians) in the fourth.
但是您将设备旋转分配为 quaternion。
要么将四元数赋给SCNNode
的orientation
property of SCNNode
or use the yaw, pitch and roll angles of CMAttitude
and assign these to the eulerAngles
属性:
The node’s orientation, expressed as pitch, yaw, and roll angles, each in radians.