2017-02-02 8 views
0

Я новичок в SceneKit, и то, что я пытаюсь сделать, это загрузить файл dae в SCNScene, установить этот SCNScene в SCNView, включить взаимодействие с пользователем, а затем я могу повернуть 3D-модель с помощью жестов. Пока все идет хорошо, когда я сажусь или увеличиваю/уменьшаю, 3D-модель работает так, как должна быть. Тем не менее, мне действительно нужно, чтобы, когда происходит жест (прокрутка вправо или влево), 3D-модель вращается только горизонтально, и нет увеличения/уменьшения масштаба, что я могу сделать, чтобы это произошло? Вот мой код:После включения взаимодействия пользователя с SCNView, как заставить его вращать только по горизонтали?

// retrieve the SCNView 
SCNView *myView = (SCNView *)self.view; 

// load dae file and set the scene to the view 
myView.scene = [SCNScene sceneNamed:@"model.dae"]; 

myView.userInteractionEnabled = YES; 
myView.allowsCameraControl = YES; 
myView.autoenablesDefaultLighting = YES; 
myView.backgroundColor = [UIColor lightGrayColor]; 

Спасибо за любую помощь!

ответ

2

Я не уверен, что вы можете сделать это с помощью allowsCameraControl - это, по-видимому, очень базовое условие для взаимодействия с моделью.

Если добавить жест панорамирования на сцену вы можете манипулировать любой узел в модели, однако, пожалуйста:

- (void)viewDidLoad { 
    // Add the scene etc.... 

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)]; 
    [_sceneView addGestureRecognizer:panRecognizer]; 
} 

- (void)panGesture:(UIPanGestureRecognizer *)sender { 
    CGPoint translation = [sender translationInView:sender.view]; 

    if (sender.state == UIGestureRecognizerStateChanged) { 
     [self doPanWithPoint:translation]; 
    } 
} 

- (void)doPanWithPoint:(CGPoint)translation { 
    CGFloat x = (CGFloat)(translation.y) * (CGFloat)(M_PI)/180.0; 
    CGFloat y = (CGFloat)(translation.x) * (CGFloat)(M_PI)/180.0; 

    // Manuipulate the required (root?) node as you see fit 
    _geometryNode.transform = SCNMatrix4MakeRotation(x, 0, 1, 0); 
    _geometryNode.transform = SCNMatrix4Mult(_geometryNode.transform, SCNMatrix4MakeRotation(y, 1, 0, 0)); 
} 

Вы можете явно пропустить второй этап вращения (или установить у = 0) только вращаться горизонтально.

+0

Очень полезно! большое спасибо! :) – Alison

 Смежные вопросы

  • Нет связанных вопросов^_^