swift – SCNCamera限制弧形旋转
我有一个SCNCamera的场景设置,围绕一个对象旋转.
限制相机在物体周围可以实现的旋转范围的最佳方法是什么? 示例:如何围绕整个球体旋转,如何限制旋转到单个半球? 我的第一次尝试是查看.allowsCameraControl是否有任何夹子.找不到任何东西. 然后我尝试调整c#Unity:mouse orbit script,没有运气. 关于如何处理或解决这个问题的一些指示很好. 由于this answer.,Boilerplate Arcball var lastWidthRatio: Float = 0 var lastHeightRatio: Float = 0 let camera = SCNCamera() let cameraNode = SCNNode() let cameraOrbit = SCNNode() override func viewDidLoad() { super.viewDidLoad() // create a new scene let scene = SCNScene(named: "art.scnassets/ship.scn")! // create and add a camera to the scene camera.usesOrthographicProjection = true camera.orthographicScale = 9 camera.zNear = 0 camera.zFar = 100 cameraNode.position = SCNVector3(x: 0,y: 0,z: 50) cameraNode.camera = camera cameraOrbit.addChildNode(cameraNode) scene.rootNode.addChildNode(cameraOrbit) // retrieve the ship node let ship = scene.rootNode.childNodeWithName("ship",recursively: true)! // retrieve the SCNView let scnView = self.view as! SCNView // set the scene to the view scnView.scene = scene // add a tap gesture recognizer let gesture = UIPanGestureRecognizer(target: self,action: "panDetected:"); scnView.addGestureRecognizer(gesture); } func panDetected(sender: UIPanGestureRecognizer) { let translation = sender.translationInView(sender.view!) let widthRatio = Float(translation.x) / Float(sender.view!.frame.size.width) + lastWidthRatio let heightRatio = Float(translation.y) / Float(sender.view!.frame.size.height) + lastHeightRatio self.cameraOrbit.eulerAngles.y = Float(-2 * M_PI) * widthRatio self.cameraOrbit.eulerAngles.x = Float(-M_PI) * heightRatio print(Float(-2 * M_PI) * widthRatio) if (sender.state == .Ended) { lastWidthRatio = widthRatio % 1 lastHeightRatio = heightRatio % 1 } }
看起来你几乎就在那里,仅使用@Rickster代码
你引用的答案. 您可以进行的更改将在以下行中: self.cameraOrbit.eulerAngles.y = Float(-2 * M_PI) * widthRatio self.cameraOrbit.eulerAngles.x = Float(-M_PI) * heightRatio 这隐含地允许俯仰和偏航覆盖整个 self.cameraOrbit.eulerAngles.x = Float(-M_PI_2) + Float(-M_PI_2) * heightRatio 使用全屏幕在-π/ 2和-π之间平滑变化 (编辑以解决惯性评论) 对于旋转阻尼或惯性,我会使用内置的SceneKit Physics接近它,并且可能将摄像机置于不可见(无几何)的SCNNode上.该摄像机节点变为万向节,类似于该项目中采用的方法:An interactive seven-foot globe created entirely in RubyMotion and SceneKit. 然后虚拟万向节得到一个SCNPhysicsBody(你添加它,默认情况下没有一个)带有一些阻尼.或者您可能将物理放在中心对象上,并为该对象提供一些angularDamping. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |