Это нарисует узел @ 0,0,0 с контуром того, из чего человека перетащили, переводя координаты экрана в мир.Я создал отдельный массив SCNVector3, которые представляют собой координаты в трехмерном пространстве (вы можете опустить несколько узлов на экране в этих точках, чтобы доказать позиции).Также обратите внимание, что добавление - это x, z, z (не scenepoint.y).Моя камера смотрит на 0,0,0 от 0,15,0,1.Это, по крайней мере, даст вам представление о том, что происходило с z, и, надеюсь, ответит на заданный вами вопрос.
Если вы хотите, чтобы результирующая фигура оставалась на одной линии с тем местом, к которому прикоснулся пользователь, здесь это не решено.
var shapeNode = SCNNode()
func updateBazierPath()
{
for vPoints in arrayCGPoints
{
let projectedPoint = gameScene.projectPoint(SCNVector3(0, 0, 0))
let scenePoint = gameScene.unprojectPoint(SCNVector3(vPoints.x, vPoints.y, CGFloat(projectedPoint.z)))
scenePoints.append(SCNVector3(scenePoint.x, scenePoint.z, scenePoint.z))
}
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: CGFloat(scenePoints[0].x), y: CGFloat(scenePoints[0].y)))
for vCount in 1...scenePoints.count - 1
{
bezierPath.addLine(to: CGPoint(x: CGFloat(scenePoints[vCount].x), y: CGFloat(scenePoints[vCount].y)))
}
bezierPath.close()
shapeNode.removeFromParentNode()
let shape = SCNShape(path: bezierPath, extrusionDepth: 0.5)
shapeNode = SCNNode(geometry: shape)
shapeNode.geometry?.firstMaterial?.isDoubleSided = true
shapeNode.geometry!.firstMaterial?.diffuse.contents = UIColor.yellow
//let action = SCNAction.repeatForever(SCNAction.rotate(by: .pi, around: SCNVector3(1, 0, 0), duration: 5))
//shapeNode.runAction(action)
shapeNode.position = SCNVector3(0, 0, 0)
shapeNode.eulerAngles.x = -.pi / 2
gNodes.gameNodes.addChildNode(shapeNode)
}