Esempio n. 1
0
        private void SetupCameraControl()
        {
            // Unregister
            if (_cameraControl != null)
            {
                SizeChanged -= OnSizeChanged;
            }

            // Get template part
            _cameraControl = (CameraControl)GetTemplateChild(CAMERACONTROL_NAME);

            // Bail if missing
            if (_cameraControl == null)
            {
                return;
            }

            SizeChanged += OnSizeChanged;

            // Camera setup
            _cameraControl.SetAsPerspective(RenderSize.ToVector2());
            _cameraControl.Yaw   = 0;
            _cameraControl.Pitch = 0;
            _cameraControl.PerspectiveDistance = 575;
            _cameraControl.Position            = new Vector3(1920 / 2, 1080 / 2, 0);

            // ImageLoader
            _compositor     = _cameraControl.CompositionCamera.CameraVisual.Compositor;
            _surfaceFactory = SurfaceFactory.GetSharedSurfaceFactoryForCompositor(_compositor);

            // Skybox container
            var halfSkyboxSize         = _skyboxSize / 2;
            var negativeHalfSkyboxSize = -_skyboxSize / 2;

            _skyboxContainer              = _compositor.CreateContainerVisual();
            _skyboxContainer.CenterPoint  = new Vector3(halfSkyboxSize, halfSkyboxSize, halfSkyboxSize);
            _skyboxContainer.AnchorPoint  = new Vector2(halfSkyboxSize, halfSkyboxSize);
            _skyboxContainer.Offset       = new Vector3(negativeHalfSkyboxSize, negativeHalfSkyboxSize, negativeHalfSkyboxSize);
            _skyboxContainer.RotationAxis = _rotationAxisY;
            _skyboxContainer.BorderMode   = CompositionBorderMode.Hard;
            _skyboxContainer.Comment      = "Skybox";

            // Skybox sides
            SetupSkyboxSide(SkyboxSide.Top);
            SetupSkyboxSide(SkyboxSide.Left);
            SetupSkyboxSide(SkyboxSide.Right);
            SetupSkyboxSide(SkyboxSide.Bottom);
            SetupSkyboxSide(SkyboxSide.Front);
            SetupSkyboxSide(SkyboxSide.Back);

            // World root
            SpriteVisual treeRoot  = _compositor.CreateSpriteVisual();
            SpriteVisual worldRoot = _compositor.CreateSpriteVisual();

            treeRoot.Comment  = "TreeRoot";
            worldRoot.Comment = "WorldRoot";

            ElementCompositionPreview.SetElementChildVisual(_cameraControl, treeRoot);
            treeRoot.Children.InsertAtTop(worldRoot);
            worldRoot.Children.InsertAtTop(_skyboxContainer);

            if (AutoRotate)
            {
                // Animate for fun.
                Rotate(360, 100000);
            }
        }