大佬教程收集整理的这篇文章主要介绍了ios – Scenekit Pan 2D翻译到正交3D仅水平,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
var cameraNode = SCNNode() cameraNode.camera = SCNCamera() cameraNode.name = "Camera" cameraNode.position = SCNVector3Make(-5.0,-5.0,10.0) cameraNode.eulerAngles = SCNVector3Make(PI / 3.0,0.0,-PI / 4.0) cameraNode.camera?.usesOrthographicProjection = true cameraNode.camera?.orthographicScale = 7.0 scene.rootNode.addChildNode(cameraNodE)@H_696_2@现在我想使用平移手势移动相机,产生滚动感.为了实现这一点,相机不应垂直移动,只能水平移动.移动时,屏幕上的触摸位置和3D世界中未投影的位置应保持不变. @H_696_2@我考虑过计算2D平移到3D差异并忽略垂直分量.这段代码实际上可以工作,几乎可以产生所需的结果,但速度不正确.如果我平移,相机似乎加速并且没有正确反应:
var prevIoUsTranslation = CGPointMake(0.0,0.0) func pan(gesture: UIPanGestureRecognizer) { let view = self.view as SCNView let translation = gesture.translationInView(view) let LOCATIOn = gesture.LOCATIOnInView(view) let diffTrans = translation - prevIoUsTranslation prevIoUsTranslation = translation let cameraNode = scene.rootNode.childNodeWithName("Camera",recursively: falsE) let worldPointTrans = view.unprojectPoint(SCNVector3Make(-Float(diffTrans.X),-Float(diffTrans.y),0.0)) let worldPoint0 = view.unprojectPoint(SCNVector3Make(0.0,0.0)) var diff = worldPointTrans - worldPoint0 diff.x = diff.x / Float(cameraNode!.camera!.orthographicScalE) diff.y = diff.y / Float(cameraNode!.camera!.orthographicScalE) diff.z = 0 cameraNode?.position += diff }@H_696_2@有人知道一种复杂的方法来计算屏幕平移到水平3D平移,忽略垂直轴吗? @H_696_2@先感谢您 :) @H_696_2@编辑:
var prevIoUsLOCATIOn = SCNVector3(x: 0,y: 0,z: 0) func pan(gesture: UIPanGestureRecognizer) { let view = self.view as SCNView let translation = gesture.translationInView(view) let LOCATIOn = gesture.LOCATIOnInView(view) let secLOCATIOn = LOCATIOn + translation let P1 = view.unprojectPoint(SCNVector3(x: Float(LOCATIOn.X),y: Float(LOCATIOn.y),z: 0.0)) let P2 = view.unprojectPoint(SCNVector3(x: Float(LOCATIOn.X),z: 1.0)) let Q1 = view.unprojectPoint(SCNVector3(x: Float(secLOCATIOn.X),y: Float(secLOCATIOn.y),z: 0.0)) let Q2 = view.unprojectPoint(SCNVector3(x: Float(secLOCATIOn.X),z: 1.0)) let t1 = -P1.z / (P2.z - P1.z) let t2 = -Q1.z / (Q2.z - Q1.z) let x1 = P1.x + t1 * (P2.x - P1.X) let y1 = P1.y + t1 * (P2.y - P1.y) let P0 = SCNVector3Make(x1,y1,0) let x2 = Q1.x + t1 * (Q2.x - Q1.X) let y2 = Q1.y + t1 * (Q2.y - Q1.y) let Q0 = SCNVector3Make(x2,y2,0) var diffR = Q0 - P0 diffR *= -1 let cameraNode = view.scene!.rootNode.childNodeWithName("Camera",recursively: falsE) switch gesture.state { case .began: prevIoUsLOCATIOn = cameraNode!.position break; case .Changed: cameraNode?.position = prevIoUsLOCATIOn + diffR break; default: break; } }
以上是大佬教程为你收集整理的ios – Scenekit Pan 2D翻译到正交3D仅水平全部内容,希望文章能够帮你解决ios – Scenekit Pan 2D翻译到正交3D仅水平所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。