我有以下情况。一个SCNView带着.scn一座桥的展示。在屏幕的左边,你可以看到桥的视觉表现形式。
我想做以下几件事。
在“模型浏览器”中选择左边的项 缩放到选定的项目并将焦点集中在它上。 https://i.stack.imgur.com/OBDbi.png
在提供的截图上。你可以看到我选择了Kist是黄色的SceneView现在我想放大并聚焦在选定的SCNNode
我已经试过用rayTestWithSegment若要找到要缩放的选定位置,请执行以下操作。但结果rayTestWithSegment总是[].
我也试过用SCNLookAtConstraint但这不管用。
var constraint: SCNLookAtConstraint!
func handle(gesture: UIGestureRecognizer) {
guard let result = hitTestResult(for: gesture), let world = sceneView?.scene?.physicsWorld else { return }
let nodePosition = result.node.position
let results = world.rayTestWithSegment(from: SCNVector3(0, 1, 0), to: nodePosition, options: nil)
print(results)
constraint = SCNLookAtConstraint(target: result.node)
sceneView?.pointOfView?.constraints = [constraint]
}
func hitTestResult(for gesture: UIGestureRecognizer) -> SCNHitTestResult? {
let location = gesture.location(in: sceneView)
guard let hit = sceneView?.hitTest(location, options: nil), hit.count > 0, let result = hit.first else {
return nil
}
return result
}
我在用rayTestWithSegment因为有可能SCNNode我选择的不是完全可见的。例如,一个SCNNode它位于此透视图中的另一个节点后面。
提前谢谢,我希望有人能帮我解释我做错了什么。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。