【发布时间】:2020-04-29 14:28:55
【问题描述】:
【问题讨论】:
【问题讨论】:
回答您的第一个问题,要使节点粘在特定位置,您只需保留所需位置并添加节点,除非您将其删除,否则它不应消失。当你改变手机方向和位置时,它可能会上下移动一点,但不会太多
node.position = SCNVector3(x, y, z)
如果您使用触摸来定义位置,我建议您考虑使用 sceneView.hitTest() 和 touchesBegan() 函数
至于旋转,您只需在感兴趣的节点上沿任何轴和任何需要的方向使用欧拉角
node.eulerAngles.x = -.pi / 2
另外,我强烈推荐你 “App Development with Swift” 来自 Apple Education,2019 年。在本书中有一整章是关于 ARKit,除了回答你的问题之外,它还有许多有用的技术和想法
Here 你可以从使用 Swift 的 App 开发一书中找到本章末尾指导项目的实现,但自己动手会更有用
给定here,您可以使用两个选项之一进行轮换
let boxAnchor = try! Experience.loadBox()
boxAnchor.steelBox?.orientation = simd_quatf(angle: .pi/4, axis: [0, 0, 1])
对于角度属性,您插入要以弧度为单位旋转对象的程度,对于轴属性,您选择要围绕旋转的轴。
另一种选择是使用变换
boxAnchor.steelBox?.transform = Transform(pitch: 0, yaw: 0, roll: .pi/4)
Roll、pitch 和 yaw 表示沿特定轴的旋转,更多写为here。
要更改位置,您可以再次使用变换的翻译
steelBox.transform.translation = [0, 0, -0.5]
这将根据给定的参数翻译您的对象。这个函数严重依赖affine transforms。
SceneKit 中的节点以及 RealityKit 中的实体相对于父节点或实体进行变换和旋转。
因此,就您而言,您有一个大模型,您计划在其中放置较小的对象。
你有两个选择,要么在大模型(房子)上使用触摸检测,然后他们手动计算应该放置对象的位置,这可能非常麻烦。
另一种选择是在预定义的位置添加小的透明平面,然后在它们上添加触摸检测。这样你就可以省略计算较小的对象应该放在哪里
祝你好运!
【讨论】: