您从 CMAttitude 获得的四元数似乎有缺陷。在 Unity 中,我可以获取 iPhone 的旋转,将其应用于 3d 对象,并且当您旋转 iPhone 时,该对象将旋转。在 Xcode 中似乎有所不同。
要设置快速测试项目,请按以下步骤操作:
在 Xcode 中,从 iOS > 游戏模板 创建一个新项目(这为我们提供了一个 3d 对象进行测试)。
在 GameViewController.h
中添加 #import
和 @property (strong, nonatomic) CMMotionManager *motionManager;
在 GameViewController.m
中删除第 46 行的动画 [ship runAction: etc..
并且不允许在第 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 对象(飞机)不会跟随手机的旋转。投球类作品。
这是故意的吗?我怎么用错了?
在 3D 空间中有不同的旋转表示。
您正在使用 SCNNode
的 rotation
属性:
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 .
将四元数分配给 orientation
SCNNode
的属性或使用 CMAttitude
的偏航角、俯仰角和滚动角并将这些分配给 eulerAngles
SCNNode
的属性:
The node’s orientation, expressed as pitch, yaw, and roll angles, each in radians.
关于ios - iPhone 旋转应用于 3d 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604662/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |