Example #1
0
        public override void Setup()
        {
            base.Setup();

            // 設定する AR コンテンツをここに記述

            //////////////////////////////////////////////////////////////////
            // デバイスの向きを検出
            var wallOrientation = WallOrientationForDeviceOrientation();

            //////////////////////////////////////////////////////////////////
            // ターゲットとして使用されるノードを作成
            var targetPosition = new Vector3f(0, 0, -1000);     // スクリーンから1000離れた場所に置く
            var wallScale      = new Vector3f(0.5f, 0.5f, 0.5f);

            this.WallTargetNode = CreateImageNode(MainPageViewModel.ImageNodeInfo.Value, wallOrientation, wallScale, targetPosition);

            //////////////////////////////////////////////////////////////////
            // ターゲットノードをコンテンツビューポートに関連付けられたカメラノードの子として追加
            this.ARView.ContentViewPort.Camera.AddChild(this.WallTargetNode);

            //////////////////////////////////////////////////////////////////
            // ArbiTrack ワールド空間に配置する画像ノードを作成
            var trackingImageNode = CreateImageNode(MainPageViewModel.ImageNodeInfo.Value, Quaternion.Identity, Vector3f.UnitXyz, new Vector3f(0.0f, 0.0f, 0.0f));

            //var trackingImageNode = CreateModelNode(Quaternion.Identity, Vector3f.UnitXyz, new Vector3f(0.0f, 0.0f, 0.0f));

            // ArbiTrack のセットアップ
            SetUpArbiTrack(this.WallTargetNode, trackingImageNode);
        }
Example #2
0
        public void OnAnchorRemoved(ARAnchor p0, ARNode p1)
        {
            var anchorId = p0.AnchorId;

            if (mImageTarget.Id != anchorId)
            {
                return;
            }

            mBlackPantherNode.Visible = false;
        }
Example #3
0
        private void AddNodeToGyroPlaceManager(ARNode node)
        {
            // ジャイロスコープの配置を初期化
            var gyroPlaceManager = ARGyroPlaceManager.Instance;

            gyroPlaceManager.Initialise();

            // デバイスのジャイロスコープとともに移動するように、
            // ジャイロスコープ配置マネージャーのワールド空間にターゲット ノードを追加
            gyroPlaceManager.World.AddChild(node);
        }
Example #4
0
        public void OnAnchorRemoved(ARAnchor p0, ARNode p1)
        {
            var anchorId = p0.AnchorId;

            if (!mTargetedNodesMap.ContainsKey(anchorId))
            {
                return;
            }

            var imageTargetNode = mTargetedNodesMap[anchorId].Value;

            imageTargetNode.Visible = false;
        }
Example #5
0
        private void SetUpArbiTrack(ARNode targetNode, ARNode childNode)
        {
            // ArbiTrack を初期化
            var arbiTrack = ARArbiTrack.Instance;

            arbiTrack.Initialise();

            // ターゲットノードを設定
            arbiTrack.TargetNode = targetNode;

            // ArbiTrack のワールド空間に子としてノードを追加
            arbiTrack.World.AddChild(childNode);
        }
Example #6
0
// Finally, hide isTracking UI if we haven't done so already.
            public void OnAnchorUpdated(ARAnchor arAnchor, ARNode arNode)
            {
                if (arAnchor.GetType() == ARAnchor.Type.Plane)
                {
                    var planeAnchor = (ARPlaneAnchor)arAnchor;

                    // Update the mesh surface geometry
                    var node       = surfaces[arAnchor.AnchorId];
                    var plane      = (ViroCore.Surface)node.Geometry;
                    var dimensions = planeAnchor.Extent;
                    plane.Width  = dimensions.X;
                    plane.Height = dimensions.Z;
                }
            }
Example #7
0
            public void OnAnchorFound(ARAnchor arAnchor, ARNode arNode)
            {
                // Spawn a visual plane if a PlaneAnchor was found
                if (arAnchor.GetType() == ARAnchor.Type.Plane)
                {
                    var planeAnchor = (ARPlaneAnchor)arAnchor;

                    // Create the visual geometry representing this plane
                    var dimensions = planeAnchor.Extent;
                    var plane      = new ViroCore.Surface(1, 1)
                    {
                        Width = dimensions.X, Height = dimensions.Z
                    };

                    // Set a default material for this plane.
                    var material = new Material {
                        DiffuseColor = Color.ParseColor("#BF000000")
                    };
                    plane.Materials = new List <Material>()
                    {
                        material
                    };

                    // Attach it to the node
                    var planeNode = new Node {
                        Geometry = plane
                    };
                    planeNode.SetRotation(new Vector(-Math.ToRadians(90.0), 0, 0));
                    planeNode.SetPosition(planeAnchor.Center);

                    // Attach this planeNode to the anchor's arNode
                    arNode.AddChildNode(planeNode);
                    surfaces.Add(arAnchor.AnchorId, planeNode);

                    // Attach click listeners to be notified upon a plane onClick.
                    planeNode.Click += (s, e) =>
                    {
                        foreach (var listener in mPlaneClickListeners)
                        {
                            listener.OnClick(e.P0, e.P1, e.P2);
                        }
                    };
                    HideIsTrackingLayoutUi();
                }
            }
Example #8
0
        private void Update3DModelProduct()
        {
            // Hide the product if the user has not placed it yet.
            if (mStatus != TrackStatus.SelectedSurface)
            {
                mProductModelGroup.Opacity = 0;
                return;
            }

            if (mHitArNode != null)
            {
                return;
            }

            mHitArNode = mScene.CreateAnchoredNode(mCrosshairModel.PositionRealtime);
            mHitArNode.AddChildNode(mProductModelGroup);
            mProductModelGroup.Opacity = 1;
        }
Example #9
0
        public void OnAnchorFound(ARAnchor p0, ARNode p1)
        {
            var anchorId = p0.AnchorId;

            if (mImageTarget.Id != anchorId)
            {
                return;
            }

            Vector anchorPos = p0.Position;
            Vector pos       = new Vector(anchorPos.X, anchorPos.Y - 0.4, anchorPos.Z - 0.15);

            mBlackPantherNode.SetPosition(pos);
            mBlackPantherNode.SetRotation(p0.Rotation);
            mBlackPantherModel.Visible = true;
            mImageTargetFound          = true;
            StartPantherExperience();
        }
Example #10
0
        public void OnAnchorFound(ARAnchor p0, ARNode p1)
        {
            var anchorId = p0.AnchorId;

            if (!mTargetedNodesMap.ContainsKey(anchorId))
            {
                return;
            }

            var imageTargetNode = mTargetedNodesMap[anchorId].Value;
            var rot             = new Vector(0, p0.Rotation.Y, 0);

            imageTargetNode.SetPosition(p0.Position);
            imageTargetNode.SetRotation(rot);
            imageTargetNode.Visible = true;
            AnimateCarVisible(mCarModelNode);

            // Stop the node from moving in place once found
            var imgTarget = mTargetedNodesMap[anchorId].Key;

            mScene.RemoveARImageTarget(imgTarget);
            mTargetedNodesMap.Remove(anchorId);
        }
Example #11
0
 public void OnAnchorUpdated(ARAnchor p0, ARNode p1)
 {
     //no op
 }
Example #12
0
 public void OnAnchorRemoved(ARAnchor p0, ARNode p1)
 {
     // no-op
 }
Example #13
0
 public void OnAnchorFound(ARAnchor p0, ARNode p1)
 {
     // no-op
 }
Example #14
0
 public void OnAnchorRemoved(ARAnchor arAnchor, ARNode arNode)
 {
     surfaces.Remove(arAnchor.AnchorId);
 }