как получить положение точки поворота 3D-узла относительно точки обзора камеры - PullRequest
0 голосов
/ 25 апреля 2020

Я создаю 3D-сканирование материального порта в помещении моего дома, я помещаю 3d (мой дом) в Arkit - мир,

Теперь я хотел бы получить положение точки поворота положения 3D-объектов относительно положения камеры arkit, когда я перемещаюсь с моим телефоном - вы можете сказать, что я перемещаюсь внутри своей 3d модели дома.

Я добавил узел камеры на карту scnnode - - это узел, который используется только сохранить положение карты относительно текущего положения камеры - но положение камеры неправильное? Есть ли у вас какие-либо идеи, что это будет абсолютной фантазией c, поскольку я не могу решить это.

func Add3DMatterPort (augImage : AugmentedImage, QRNode : SCNNode)
{
    updateQueue.async {
        let scene = SCNScene(named: "art.scnassets/1a/1a.scn");
        self.map = scene?.rootNode.childNode(withName: "1a", recursively: false);

        let position = SCNVector3(CGFloat((augImage.position.x as NSString).floatValue), CGFloat((augImage.position.y as NSString).floatValue), CGFloat((augImage.position.z as NSString).floatValue));

        let rx = ((augImage.rotation.rx as NSString).integerValue.degreesToRadians);
        let ry = ((augImage.rotation.ry as NSString).integerValue.degreesToRadians);
        let rz = ((augImage.rotation.rz as NSString).integerValue.degreesToRadians);
        let rotation = SCNVector3(Float(rx), Float(ry), Float(rz));

        self.map?.position = position;
     //   Rotation around an axis = eulerAngles
        self.map?.eulerAngles = rotation;
        QRNode.addChildNode(self.map!);


    }

}

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
    updateQueue.async {
/* HERE IS THE PROBLEM - I DON'T GET RIGHT VALUE - ITS map node which I want position of relative to the camera as i move around in the 3d model */
        guard let pointOfView = self.scnView.pointOfView else { return}

        let PointOfViewTransform = pointOfView.transform;
        let orientation = SCNVector3(-PointOfViewTransform.m31, -PointOfViewTransform.m32, -PointOfViewTransform.m33);
        let location = SCNVector3(PointOfViewTransform.m41, PointOfViewTransform.m42, PointOfViewTransform.m43);
        let currentPositionOfCamera = orientation + location;



        self.camera.position = currentPositionOfCamera


    DispatchQueue.main.async {



        self.poxX.text = String(self.camera.position.x);
        self.posY.text = String(self.camera.position.y);
        self.posZ.text = String(self.camera.position.z);

        self.rotX.text = String(self.camera.rotation.x);
        self.rotY.text = String(self.camera.rotation.y);
        self.rotZ.text = String(self.camera.rotation.z);
        self.rotW.text = String(self.camera.rotation.w);
    }

}
...