Xamarin iOS: перемещайте определенный узел в дополненной реальности с помощью Scene-kit с помощью касания - PullRequest
0 голосов
/ 11 октября 2018

Это мой код, связанный с добавлением SCNNode:

void AddPlane(ARHitTestResult hitTestResult)
    {

        // Create a new scene
        var scene = SCNScene.FromFile("art.scnassets/plane_banner.scn");

        planeNode = scene.RootNode.FindChildNode("planeBanner", true);

        planeNode.Position = new SCNVector3(hitTestResult.WorldTransform.Column3.X, hitTestResult.WorldTransform.Column3.Y, hitTestResult.WorldTransform.Column3.Z);

        planeNode.Scale = new SCNVector3((float)0.005, (float)0.005, (float)0.005);

        this.sceneView.Scene.RootNode.AddChildNode(planeNode);

        // Pan gesture
        tappedObjectNode = planeNode;
        planeNode.Name = "planeBanner";
        var panGestureRecognizer = new UIPanGestureRecognizer(move);
        sceneView.AddGestureRecognizer(panGestureRecognizer);

    }

Это мой метод " move ":

void move(UIPanGestureRecognizer sender)
    {
        if (movingNow)
        {
            CGPoint translation;
            translation = sender.TranslationInView(sceneView);
            SCNVector3 result = CGPointToSCNVector3(sceneView, tappedObjectNode.Position.Z, translation);
            tappedObjectNode.Position = result;
        }

        var test = new NSDictionary();


        var tapPosition = sender.LocationInView(this.View);
        var hitNode = sceneView.HitTest(tapPosition, test);
        if (hitNode != null && hitNode.Length > 0)
        {
            movingNow = true;

            if(hitNode[0].Node.Name == "planeBanner"){
                tappedObjectNode = hitNode[0].Node;
            }
        }

        if(sender.State == UIGestureRecognizerState.Ended) {

        }

    }

вот метод, который янайдено во время поиска ответа для получения SCNVector3 из этой точки.

SCNVector3 CGPointToSCNVector3(SCNView aView, float aDepth, CGPoint aPoint)
    {
        var projectOrigin = aView.ProjectPoint(new SCNVector3(0, 0, aDepth));
        var locationWithZ = new SCNVector3((float)aPoint.X, (float)aPoint.Y, projectOrigin.Z);
        return aView.UnprojectPoint(locationWithZ);
    }

Проблема в том, что когда я пытаюсь переместить объект, он начинает уменьшаться или начинает движение с очень левой частиscreen.

Я рассматриваю различные решения, но не могу найти ничего, что могло бы помочь в этом случае.

Может ли кто-нибудь помочь мне с этим?

Как я могу сделать идеальный подвижный объект в AR, используя Scenekit?

...