Exemplo n.º 1
0
        private async void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            var uri         = ModelUrl;
            var storageFile = await StorageFile.GetFileFromApplicationUriAsync(uri);

            var buffer = await FileIO.ReadBufferAsync(storageFile);

            var loader    = new SceneLoader();
            var sceneNode = loader.Load(buffer, _compositor);

            _hostVisual.RelativeSizeAdjustment = Vector2.One;
            ElementCompositionPreview.SetElementChildVisual(ModelHost, _hostVisual);
            _sceneVisual.Scale = new Vector3(2.5f, 2.5f, 1.0f);
            _sceneVisual.Root  = SceneNode.Create(_compositor);
            _sceneVisual.Root.Children.Clear();
            _sceneVisual.Root.Children.Add(sceneNode);


            var rotationAnimation = _compositor.CreateScalarKeyFrameAnimation();

            rotationAnimation.InsertKeyFrame(1.0f, 360.0f, _compositor.CreateLinearEasingFunction());
            rotationAnimation.Duration               = TimeSpan.FromSeconds(16);
            rotationAnimation.IterationBehavior      = AnimationIterationBehavior.Forever;
            _sceneVisual.Root.Transform.RotationAxis = new Vector3(0.0f, 1.0f, 0.2f);;
            _sceneVisual.Root.Transform.StartAnimation(nameof(SceneNode.Transform.RotationAngleInDegrees), rotationAnimation);

            _hostVisual.Children.InsertAtTop(_sceneVisual);
        }
Exemplo n.º 2
0
        private async void Surprise_Click(object sender, RoutedEventArgs e)
        {
            if (_hostVisual.Children.Any())
            {
                return;
            }

            // TODO 6.2: [AnimatedVisualPlayer] - Show the Lottie animation while the 3D model is loading.
            //LottiePlayer.Visibility = Visibility.Visible;
            //LottiePlayer.AutoPlay = true;

            HubbleImage.Visibility = Visibility.Collapsed;

            // TODO 5.1: [SceneLoader] - Load a .gltf 3D model into a SceneNode (new API in Composition).
            var uri         = new Uri("ms-appx:///Assets/Models/Telescope.gltf");
            var storageFile = await StorageFile.GetFileFromApplicationUriAsync(uri);

            var buffer = await FileIO.ReadBufferAsync(storageFile);

            var loader    = new SceneLoader();
            var sceneNode = loader.Load(buffer, _compositor);

            // TODO 6.3: [AnimatedVisualPlayer] - Hide the Lottie animation after the 3D model finished loading.
            //LottiePlayer.Stop();
            //await LottiePlayer.Fade(duration: 600).StartAsync();

            // TODO 5.2: [SceneLoader] - Host the 3D SceneNode inside a XAML element (ModelHost Rectangle).
            // NOTE: 3D Xaml Control coming too! It is being tracked here:
            // https://github.com/microsoft/microsoft-ui-xaml/issues/686
            _hostVisual.RelativeSizeAdjustment = Vector2.One;
            ElementCompositionPreview.SetElementChildVisual(ModelHost, _hostVisual);
            _sceneVisual.Scale = new Vector3(2.5f, 2.5f, 1.0f);
            _sceneVisual.Root  = SceneNode.Create(_compositor);
            _sceneVisual.Root.Children.Clear();
            _sceneVisual.Root.Children.Add(sceneNode);

            // Auto-rotate the SceneVisual.
            var rotationAnimation = _compositor.CreateScalarKeyFrameAnimation();

            rotationAnimation.InsertKeyFrame(1.0f, 360.0f, _compositor.CreateLinearEasingFunction());
            rotationAnimation.Duration               = TimeSpan.FromSeconds(16);
            rotationAnimation.IterationBehavior      = AnimationIterationBehavior.Forever;
            _sceneVisual.Root.Transform.RotationAxis = new Vector3(0.0f, 1.0f, 0.2f);;
            _sceneVisual.Root.Transform.StartAnimation(nameof(SceneNode.Transform.RotationAngleInDegrees), rotationAnimation);

            _hostVisual.Children.InsertAtTop(_sceneVisual);
        }
Exemplo n.º 3
0
        public async Task CrossThread4(UIElement mc)
        {
            try
            {
                Uri         uri         = new Uri("ms-appx:///assets/Telescope.gltf");
                StorageFile storageFile = await StorageFile.GetFileFromApplicationUriAsync(uri);


                compositor = Window.Current.Compositor;

                IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);

                loader = new SceneLoaderComponent.SceneLoader();
                var sceneNode = loader.Load(buffer, compositor);


                hostVisual = compositor.CreateContainerVisual();
                hostVisual.RelativeSizeAdjustment = Vector2.One;
                hostVisual.Offset = new Vector3(0, 50, 0);
                ElementCompositionPreview.SetElementChildVisual(mc, hostVisual);

                sceneVisual      = SceneVisual.Create(compositor);
                sceneVisual.Root = SceneNode.Create(compositor);

                sceneVisual.Root.Children.Add(sceneNode);


                var rotationAnimation = compositor.CreateScalarKeyFrameAnimation();
                rotationAnimation.InsertKeyFrame(1.0f, 360.0f, compositor.CreateLinearEasingFunction());
                rotationAnimation.Duration          = TimeSpan.FromSeconds(16);
                rotationAnimation.IterationBehavior = AnimationIterationBehavior.Forever;

                sceneVisual.Root.Transform.RotationAxis = new Vector3(0.0f, 1.0f, 0.2f);
                sceneVisual.Root.Transform.StartAnimation("RotationAngleInDegrees", rotationAnimation);

                hostVisual.Children.InsertAtTop(sceneVisual);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            finally
            {
            }
        }