首页 > 解决方案 > 如何在 Swift (ARKit, SCNKit) 中创建带起点和终点的线

问题描述

我想创建一条线,我可以告诉它在 ARKit 的场景中从哪里开始和在哪里结束。其他人做了这门课,但我得到了错误。像 node... 的 startLine 和 node... 的 endLine 这样简单的东西会很有帮助。我觉得在两点之间做一条简单的线不应该那么复杂,所以如果你的答案很复杂,请解释为什么必须这样。谢谢大家的帮助!

class LineNode: SCNNode {

private(set) var cylinder: SCNCylinder
private(set) var positionA: SCNVector3
private(set) var positionB: SCNVector3

init(with startingPoint: SCNVector3, endPoint: SCNVector3, radius: Float = 0.02, color: UIColor = .red) {
    self.positionA = startingPoint
    self.positionB = endPoint
    let vector = endPoint - startingPoint  *//error*
    let height = vector.length()
    cylinder = SCNCylinder(radius: radius, height: Float(height))
    cylinder.radialSegmentCount = 8
    cylinder.firstMaterial?.diffuse.contents = color
    super.init()
    geometry = cylinder
    position = (endPoint + startingPoint) / 2   *//error*
    eulerAngles = SCNVector3.lineEulerAngles(vector: vector)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}

// 我得到错误:二元运算符“-”不能应用于两个“SCNVector3”操作数

标签: swiftvectorlinearkit

解决方案


SCNVector3 是一个结构,而不是一个类。您不能应用“-”运算符。

所以我们可以使用旧值创建另一个 SCNVector3。

let vector = SCNVector3(endPoint.x - startingPoint.x, startingPoint.y, startingPoint.z)

推荐阅读