ARKit:将平面放置在两个节点/向量之间

时间:2019-03-18 03:43:09

标签: swift arkit

我正在尝试在两个向量之间放置一个平面。但是,平面的方向很重要,因为我将箭头从第一个节点“指向”第二个节点。这是我尝试过的:

private func placeArrows(source: SCNVector3, destination: SCNVector3) {
    let height = source.distance(vector: destination)
    let plane = SCNPlane(width: CGFloat(0.4), height: CGFloat(height))
    plane.firstMaterial?.diffuse.contents = UIImage(named: "Arrow")
    plane.firstMaterial?.isDoubleSided = true
    plane.firstMaterial?.diffuse.contentsTransform = SCNMatrix4MakeScale(1,-height,1)
    plane.firstMaterial?.diffuse.wrapT = SCNWrapMode.repeat
    plane.firstMaterial?.diffuse.wrapS = SCNWrapMode.repeat

    let node = SCNNode(geometry: plane)
    node.position = SCNVector3((source.x + destination.x) / 2, floor_pos_y, (source.z + destination.z) / 2)
    let dirVector = SCNVector3Make(destination.x - source.x, destination.y - source.y, destination.z - source.z)
    let yAngle = atan(dirVector.x / dirVector.z)
    node.eulerAngles.x = -.pi / 2
    node.eulerAngles.y = yAngle
    route_nodes.append(node)
    ARView.scene.rootNode.addChildNode(node)
}

这些平面最终指向两个方向,即有些指向第二节点,有些指向第一节点。而且我还无法弄清楚这一点。任何帮助将不胜感激。谢谢!

编辑:

Here is a screenshot of the result

如您所见,一个箭头指向左侧,另一个箭头指向右侧。期望的结果是两个箭头都指向相同的方向,即向左

1 个答案:

答案 0 :(得分:0)

尝试从不同角度解决此问题后,我终于找到了问题。

1px solid transparent;

此行实际上应替换为以下行:

let yAngle = atan(dirVector.x / dirVector.z)