Это видеопроигрыватель на 360 градусов.
Я добавляю cameranode (SCNNode
) в корневой каталог, cameranode помещается в центр (0,0,0) из SCNSphere
, он может воспроизводить видео до сих пор.
Теперь я должен использовать devicemotion. Мне нужно повернуть камеру, когда устройство движется. Не просто поверните определенный угол. (Не только движение устройства. Когда я держу устройство, мое движущееся отношение к движению устройства, потому что я обнаружил, что если я использую deviceMotion.attitude.roll
, cameranode движется только тогда, когда устройство движется само по себе, а не когда я обхожусь с устройством)
Когда устройство находится в позиции (x1, y1, z1), видеокамера будет вращаться при перемещении устройства, а когда устройство, расположенное в позиции (x1, y1, z1) снова, вид должен быть таким же, как и последний раз мы оставили.
Вот что я сделал:
if (self.motionManager.gyroAvailable) {
self.motionManager.gyroUpdateInterval = 1.0/60.0;
[self.motionManager startGyroUpdatesToQueue:self.queue withHandler:^(CMGyroData *gyroData, NSError *error){
if (error) {
[self.motionManager stopGyroUpdates];
NSLog(@"Gyroscope encountered error:%@",error);
}else {
CGFloat tempX = 0;
CGFloat tempY = 0;
CGFloat tempZ = 0;
if ((fabs(gyroData.rotationRate.y)/60) > 0.002) {
tempY = gyroData.rotationRate.y/60;
}
tempX = gyroData.rotationRate.x/60;
tempZ = gyroData.rotationRate.z/60;
[self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0]];
}
}];
}else {
NSLog(@"This device has no gyroscope");
}
Математика может быть неправильной, я не знаю, почему я бы разделил 60, но мне кажется, что это самое близкое значение, когда я использую [self.cameraNode runAction:[SCNAction rotateByX:-tempY y:tempX z:tempZ duration:0]];
Здесь проблема?
- какие данные следует использовать?
CMGyroData
или CMDeviceMotion
. Если используется CMDeviceMotion
, какое конкретное значение я должен использовать? deviceMotion.attitude
, deviceMotion.attitude.quaternion
, deviceMotion.gravity
- который является правильным методом для поворота камеры? Есть много методов, я не уверен.
+ (SCNAction *)rotateByX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;
+ (SCNAction *)rotateToX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration;