2016-07-20 6 views
2

물체를 중심으로 회전하는 카메라를 만들려고합니다. 따라서 카메라를 구에 부착해야합니다. 그 사람이 설치하는 방법을 설명하는이 스택을 발견 : Rotate SCNCamera node looking at an object around an imaginary sphereSceneKit 카메라가 물체를 중심으로 회전 함

내 문제는 카메라의 Z 축입니다. 나는 X와 Y 중심으로 회전 할 수 있지만 Z를

주변

내 코드입니다 :

class SceneManager 
{ 
private let scene: SCNScene 
private let view: SCNView 
private let cameraOrbit: SCNNode 
private var cameraOrbitLastRatioWidth: Float = 0 
private var cameraOrbitLastRatioHeight: Float = 0.2 
private var maxWidthRatioRight: Float = 0.2 
private var maxWidthRatioLeft: Float = -0.2 
private var maxHeightRatioXDown: Float = 0.02 
private var maxHeightRatioXUp: Float = 0.4 

init(view: SCNView, assetFolder: String, sceneName: String, cameraName: String, backgroundColor: UIColor) { 
    self.view = view 
    self.scene = SCNScene(named: (assetFolder + "/" + sceneName))! 
    self.view.pointOfView = self.scene.rootNode.childNodeWithName(cameraName, recursively: true) 
    if self.view.pointOfView == nil { 
     print("Error: Inexistent camera specified in init SceneManager") 
     exit(1) 
    } 
    self.cameraOrbit = SCNNode() 
    self.cameraOrbit.addChildNode(self.view.pointOfView!) 
    self.scene.rootNode.addChildNode(self.cameraOrbit) 
    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(panHandler(_:))) 
    panGesture.maximumNumberOfTouches = 1 
    self.view.allowsCameraControl = false 
    self.view.addGestureRecognizer(panGesture) 
    self.view.backgroundColor = backgroundColor 
    self.view.scene = self.scene 
} 

@objc private func panHandler(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(sender.view!) 
    let ratioWidth = Float(translation.x)/Float(sender.view!.frame.size.width) + self.cameraOrbitLastRatioWidth 
    let ratioHeight = Float(translation.y)/Float(sender.view!.frame.size.height) + self.cameraOrbitLastRatioHeight 
    if (sender.state == UIGestureRecognizerState.Changed) { 
     if self.cameraOrbitLastRatioWidth >= maxHeightRatioXUp { 
      self.cameraOrbitLastRatioWidth = maxHeightRatioXUp 
     } 
     if self.cameraOrbitLastRatioWidth <= maxHeightRatioXDown { 
      self.cameraOrbitLastRatioWidth = maxHeightRatioXDown 
     } 
     if self.cameraOrbitLastRatioHeight >= maxWidthRatioRight { 
      self.cameraOrbitLastRatioHeight = maxWidthRatioRight 
     } 
     if self.cameraOrbitLastRatioHeight <= maxWidthRatioLeft { 
      self.cameraOrbitLastRatioHeight = maxWidthRatioLeft 
     } 
     self.cameraOrbit.eulerAngles.y -= Float(M_PI_4 * 3) * ratioWidth 
     self.cameraOrbit.eulerAngles.x -= Float(M_PI_4) * ratioHeight 
    } 
    if (sender.state == UIGestureRecognizerState.Ended) { 
     self.cameraOrbitLastRatioWidth = ratioWidth 
     self.cameraOrbitLastRatioHeight = ratioHeight 
    } 
} 
} 

사람이 아이디어는

답변

0

당신은 필요합니다 ;-) 매우 환영받을 것이며이있는 경우 추가 제스처 인식기 (아마도 UIRotationGestureRecognizer)를 사용하여 카메라를 자체 Z 축 (효과적으로 중심을 중심으로 뷰 회전시키기)에서 회전시킬 수 있습니다.