Ejemplo n.º 1
0
        private void OnARFrameUpdated(Frame arFrame)
        {
            var all = arCore.Session.GetAllTrackables(
                Java.Lang.Class.FromType(
                    typeof(Com.Google.AR.Core.Plane)));

            foreach (Com.Google.AR.Core.Plane plane in all)
            {
                var node = FindNodeByPlaneId(plane.GetHashCode().ToString());

                if (node == null)
                {
                    node = new PlaneNode
                    {
                        PlaneId = plane.GetHashCode().ToString(),
                        Name    = $"plane{plane.GetHashCode()}"
                    };

                    CreateSubPlane(node);
                    scene.AddChild(node);
                }

                SetPositionAndRotation(plane, node);
                UpdateSubPlane(node, Vector3.Zero);
            }
        }
Ejemplo n.º 2
0
        public override void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);

            sceneView.Session.Run(new ARWorldTrackingConfiguration
            {
                AutoFocusEnabled       = true,
                LightEstimationEnabled = true,
                PlaneDetection         = ARPlaneDetection.Horizontal,
                WorldAlignment         = ARWorldAlignment.Gravity
            }, ARSessionRunOptions.ResetTracking | ARSessionRunOptions.RemoveExistingAnchors);

            CubeNode cubeNode = new CubeNode(size, UIColor.Red);

            cubeNode.Position = new SCNVector3(0, 0, zPosition);

            SphereNode sphereNode = new SphereNode(size, UIColor.Yellow);

            sphereNode.Position = new SCNVector3(0.3f, 0, zPosition);

            TorusNode torusNode = new TorusNode(size / 2, size / 4, UIColor.Blue);

            torusNode.Position = new SCNVector3(0.6f, 0, zPosition);

            TubeNode tubeNode = new TubeNode(size / 2, size / 2, size * 2, UIColor.Orange);

            tubeNode.Position = new SCNVector3(0.9f, 0, zPosition);

            ConeNode coneNode = new ConeNode(0.0001f, size / 2, size * 2, UIColor.Green);

            coneNode.Position = new SCNVector3(0, -0.3f, zPosition);

            CylinderNode cylinderNode = new CylinderNode(size, size * 2, UIColor.Cyan);

            cylinderNode.Position = new SCNVector3(0.3f, -0.3f, zPosition);

            PyramidNode pyramidNode = new PyramidNode(size * 2, size * 2, size * 2, UIColor.Brown);

            pyramidNode.Position = new SCNVector3(0.6f, -0.3f, zPosition);

            PlaneNode planeNode = new PlaneNode(size, size, UIColor.Purple);

            planeNode.Position = new SCNVector3(0.9f, -0.3f, zPosition);

            TextNode textNode = new TextNode("Hello from ARKit", 0.01f, UIColor.Orange);

            textNode.Position = new SCNVector3(0, -0.85f, zPosition);

            sceneView.Scene.RootNode.AddChildNode(cubeNode);
            sceneView.Scene.RootNode.AddChildNode(sphereNode);
            sceneView.Scene.RootNode.AddChildNode(torusNode);
            sceneView.Scene.RootNode.AddChildNode(tubeNode);
            sceneView.Scene.RootNode.AddChildNode(coneNode);
            sceneView.Scene.RootNode.AddChildNode(cylinderNode);
            sceneView.Scene.RootNode.AddChildNode(pyramidNode);
            sceneView.Scene.RootNode.AddChildNode(planeNode);
            sceneView.Scene.RootNode.AddChildNode(textNode);
        }
Ejemplo n.º 3
0
 public override void DidAddNode(ISCNSceneRenderer renderer, SCNNode node, ARAnchor anchor)
 {
     if (anchor is ARPlaneAnchor planeAnchor)
     {
         var planeNode = new PlaneNode(planeAnchor);
         node.AddChildNode(planeNode);
         this.planeNodes.Add(anchor.Identifier, planeNode);
     }
 }
Ejemplo n.º 4
0
        private void SetPositionAndRotation(ARPlaneAnchor anchor, PlaneNode node)
        {
            arkitComponent.ApplyOpenTkTransform(node, anchor.Transform, true);

            node.ExtentX = anchor.Extent.X;
            node.ExtentZ = anchor.Extent.Z;

            var position = new Vector3(anchor.Center.X, anchor.Center.Y, -anchor.Center.Z);

            UpdateSubPlane(node, position);
        }
Ejemplo n.º 5
0
        private void SetPositionAndRotation(Com.Google.AR.Core.Plane plane, PlaneNode node)
        {
            node.ExtentX  = plane.ExtentX;
            node.ExtentZ  = plane.ExtentZ;
            node.Rotation = new Quaternion(plane.CenterPose.Qx(),
                                           plane.CenterPose.Qy(),
                                           plane.CenterPose.Qz(),
                                           -plane.CenterPose.Qw());

            node.Position = new Vector3(plane.CenterPose.Tx(),
                                        plane.CenterPose.Ty(),
                                        -plane.CenterPose.Tz());
        }
Ejemplo n.º 6
0
        public override void DidAddNode(ISCNSceneRenderer renderer, SCNNode node, ARAnchor anchor)
        {
            if (anchor is ARImageAnchor imageAnchor)
            {
                ARReferenceImage image  = imageAnchor.ReferenceImage;
                nfloat           width  = image.PhysicalSize.Width;
                nfloat           height = image.PhysicalSize.Height;

                PlaneNode planeNode = new PlaneNode(width, height, new SCNVector3(0, 0, 0), UIColor.Red);
                float     angle     = (float)(-Math.PI / 2);
                planeNode.EulerAngles = new SCNVector3(angle, 0, 0);
                node.AddChildNode(planeNode);
            }
        }
Ejemplo n.º 7
0
        private void UpdateOrAddPlaneNode(ARPlaneAnchor anchor)
        {
            var node = FindNodeByPlaneId(anchor.Identifier.ToString());

            if (node == null)
            {
                node = new PlaneNode()
                {
                    PlaneId = anchor.Identifier.ToString(),
                    Name    = $"plane{anchor.GetHashCode()}"
                };

                CreateSubPlane(node);
                scene.AddChild(node);
            }

            SetPositionAndRotation(anchor, node);
        }
Ejemplo n.º 8
0
        private SceneNodeBase GetRootNode()
        {
            var group = new GroupNode();

            var sphere   = new Sphere(1, 40, 80);
            var filename = "sphere.obj_";

            sphere.DumpObjFile(filename, "sphere");
            var          parser = new ObjVNFParser(false);
            ObjVNFResult result = parser.Parse(filename);

            if (result.Error != null)
            {
                Console.WriteLine("Error: {0}", result.Error);
            }
            else
            {
                ObjVNFMesh mesh  = result.Mesh;
                var        model = new ObjVNF(mesh);
                model.DumpObjFile("vnf" + filename, "sphere");
                var sphereNode = ObjVNFNode.Create(mesh);
                (new FormPropertyGrid(sphereNode)).Show();
                group.Children.Add(sphereNode);
                {
                    var planeNode = PlaneNode.Create();
                    planeNode.Color         = new vec4(1, 1, 1, 1);
                    planeNode.WorldPosition = new vec3(0, 1, 0);
                    planeNode.Scale         = new vec3(1, 1, 1) * 0.5f;
                    sphereNode.Children.Add(planeNode);
                }
                {
                    var axisNode = AxisNode.Create();
                    axisNode.WorldPosition = new vec3(0, 1, 0);
                    axisNode.Scale         = new vec3(1, 1, 1) * 0.5f;
                    sphereNode.Children.Add(axisNode);
                }
            }

            return(group);
        }