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); } }