2017-02-02 5 views
0

저는 SceneKit을 처음 접했습니다. SCNScene에 dae 파일을로드하고이 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)); 
} 

당신은 분명히 두 번째 회전 단계를 생략 할 수 있습니다 (또는 y 설정 = 0) 만에 수평으로 회전.

+0

매우 유용합니다! 고마워요! :) – Alison