SceneKit: значение z местоположения касания?

Я использую sceneKit в своем проекте и хотел бы добавить красную сферу (в качестве маркера) в том месте, где пользователь нажимает на 3D-модель человеческого тела (см. рисунок ниже). С кодом, который у меня есть в настоящее время, сфера добавляется в правильное положение, однако она добавляется не поверх человеческого тела, а очень близко к камере (значение z отключено). Как можно изменить значение z красной сферы так, чтобы она была добавлена ​​поверх человеческого тела, а не перед камерой? Большое спасибо :)

  import UIKit
  import QuartzCore
  import SceneKit
      
   class GameViewController: UIViewController {
        
    var selectedNode: SCNNode!
    var markerSphereNode: SCNNode!
    var bodyNode: SCNNode!
    @IBOutlet weak var sceneView: SCNView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let scene = SCNScene(named: "art.scnassets/femaleBodySceneKit Scene.scn")
        markerSphereNode = scene?.rootNode.childNode(withName: "markerSphere", recursively: true)
        bodyNode = scene?.rootNode.childNode(withName: "Body_M_GeoRndr", recursively: true)
        
        sceneView.scene = scene
        sceneView.allowsCameraControl = true
        _ = sceneView.pointOfView
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first!
        let touchPoint = touch.location(in: sceneView)
        
        if sceneView.hitTest(touch.location(in: sceneView), options: nil).first != nil {
            markerSphereNode.position = sceneView.unprojectPoint(
                SCNVector3(x: Float(touchPoint.x),
                           y: Float(touchPoint.y),
                           z: 0.56182814))
        }
    }
}

как появляется красная сфера, когда вы нажимаете на место в теле как появляется красная сфера, когда вы нажимаете на место в теле

на каком расстоянии от тела при повороте камеры (она на заднем плане если присмотреться

на каком расстоянии от тела при повороте камеры (если присмотреться, то на заднем плане)

как ДОЛЖНА выглядеть красная точка как ДОЛЖНА выглядеть красная точка


person Asritha Bodepudi    schedule 09.08.2020    source источник


Ответы (1)


SCNHitTestResult предоставляет вам localCoordinates и worldCoordinates уже. Необходимо использовать метод unprojectPoint.

person mnuages    schedule 19.08.2020