【问题标题】:ARKIT cannot scale or rotate in render methodARKIT 无法在渲染方法中缩放或旋转
【发布时间】:2019-03-11 19:25:13
【问题描述】:

目前正在玩 arkit,当我尝试在 arkit 节点内缩放对象时遇到一个大问题

extension RecordPlaceViewController: ARSCNViewDelegate {

  func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    if anchor.name == "test" {
        let sceneModel = SCNScene(named: "assetsmodels.scnassets/phone2.scn")
        let nodeModel =  sceneModel!.rootNode.childNode(withName: "Plane", recursively: true)
        nodeModel?.geometry?.firstMaterial?.diffuse.contents = UIImage(named: "uv2")
        nodeModel?.scale = SCNVector3(0.1,0.1,0.1)
        nodeModel?.eulerAngles.x = -90
        return nodeModel
    }
    return nil
 }

}

为什么这两个功能在这里不起作用?

nodeModel?.scale = SCNVector3(0.1,0.1,0.1)
nodeModel?.eulerAngles.x = -90

如果我用scnkit 添加那些只有它可以工作,但如果我用arkit 节点...缩放和位置什么都不做。

【问题讨论】:

  • 您可能会从 let nodeModel = ... 得到 nil。它是从“uv2”图像应用你的纹理吗?此外,eulerAngles 以弧度为单位,因此您不能使用度数 - 您需要进行转换,因此它是 -90.0 * .pi / 180.0。跨度>
  • 是的,我后来看到了弧度。但这不是重点。我把答案放在下一个

标签: swift arkit


【解决方案1】:

解决方案是实施

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) 

而不是

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode?

在第一种方法中,您可以做任何您需要转换节点的操作,并且已正确应用。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 2019-09-22
    • 2021-05-20
    • 2022-07-29
    • 2019-04-14
    • 2020-08-10
    • 2017-09-08
    • 2020-12-10
    • 2013-04-29
    相关资源
    最近更新 更多