Esempio n. 1
0
        private static GenericObject DefineAnimation_2Anims_31Secs()
        {
            // Define animation parameters / objects
            GenericObject genObject = new GenericObject(NamedOrGenericKey.Empty);

            // Define animation sequence
            //  Same as above, just with a wait-finished event here (dynamic wait step)
            genObject.BuildAnimationSequence()
            .Move3DTo(new Vector3(6f, 0f, 0f), new MovementSpeed(0.3f))                          // 20,0 Secs
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromSeconds(2.0))                       // 02,0 Secs
            .WaitFinished()
            .Move3DTo(new Vector3(9f, 0f, 0f), new MovementSpeed(0.3f))                          // 10,0 Secs
            .RotateEulerAnglesBy(new Vector3(2f, 0f, 0f), TimeSpan.FromSeconds(12.0))            // 12,0 Secs
            .WaitFinished()
            .Apply();
            genObject.BuildAnimationSequence()
            .Move3DTo(new Vector3(10f, 0f, 0f), new MovementSpeed(0.4f))                         // 25,0 Secs
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromSeconds(30.0))                      // 30,0 Secs
            .WaitFinished()
            .Move3DTo(new Vector3(11f, 0f, 0f), new MovementSpeed(0.4f))                         //  2,5 Secs
            .RotateEulerAnglesBy(new Vector3(2f, 0f, 0f), TimeSpan.FromSeconds(1.0))             //  1,0 Secs
            .WaitFinished()
            .ApplyAsSecondary();

            return(genObject);
        }
Esempio n. 2
0
        public void Test_EventDriven_SimpleAnimation_8()
        {
            // Define animation parameters / objects
            GenericObject genObject = new GenericObject(NamedOrGenericKey.Empty);

            // Define animation sequence
            //  Same as above, just with a wait-finished event here (dynamic wait step)
            genObject.BuildAnimationSequence()
            .Move3DTo(new Vector3(6f, 0f, 0f), new MovementSpeed(0.3f))                          // 20,0 Secs
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromSeconds(2.0))                       // 02,0 Secs
            .WaitFinished()
            .Move3DTo(new Vector3(9f, 0f, 0f), new MovementSpeed(0.3f))                          // 10,0 Secs
            .RotateEulerAnglesBy(new Vector3(2f, 0f, 0f), TimeSpan.FromSeconds(12.0))            // 12,0 Secs
            .WaitFinished()
            .Apply();
            genObject.BuildAnimationSequence()
            .Move3DTo(new Vector3(10f, 0f, 0f), new MovementSpeed(0.4f))                         // 25,0 Secs
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromSeconds(30.0))                      // 30,0 Secs
            .WaitFinished()
            .Move3DTo(new Vector3(11f, 0f, 0f), new MovementSpeed(0.4f))                         //  2,5 Secs
            .RotateEulerAnglesBy(new Vector3(2f, 0f, 0f), TimeSpan.FromSeconds(1.0))             //  1,0 Secs
            .WaitFinished()
            .ApplyAsSecondary();

            // Perform animation in an event-driven way
            EventDrivenPassInfo passInfo = genObject.AnimationHandler.CalculateEventDriven();

            // Check results
            Assert.True(passInfo.CountSteps == 4);
            Assert.True(passInfo.Steps[0].UpdateTime == TimeSpan.FromSeconds(20.0));
            Assert.True(passInfo.Steps[1].UpdateTime == TimeSpan.FromSeconds(10.0));
            Assert.True(passInfo.Steps[2].UpdateTime == TimeSpan.FromSeconds(2.0));
            Assert.True(passInfo.Steps[3].UpdateTime == TimeSpan.FromSeconds(0.5));
            Assert.True(Math.Round(passInfo.TotalTime.TotalSeconds, 1) == 32.5);
        }
        /// <summary>
        /// Builds the demo scene.
        /// </summary>
        /// <param name="manipulator">Current scene manipulator object.</param>
        /// <param name="sideLength">The side length of the pallet cube.</param>
        /// <param name="camera">The camera to be manipulated too.</param>
        private static void BuildPalletCubes(SceneManipulator manipulator, NamedOrGenericKey[] resPalletGeometrys, int sideLength)
        {
            // Build the scene
            Vector3 startPosition = new Vector3(-sideLength * SPACE_X / 2f, 0f, -sideLength * SPACE_Z / 2f);
            Random  randomizer    = new Random(Environment.TickCount);

            for (int loopX = 0; loopX < sideLength; loopX++)
            {
                for (int loopY = 0; loopY < sideLength; loopY++)
                {
                    for (int loopZ = 0; loopZ < sideLength; loopZ++)
                    {
                        GenericObject palletObject = new GenericObject(
                            resPalletGeometrys[randomizer.Next(0, resPalletGeometrys.Length)],
                            new Vector3(loopX * SPACE_X, loopY * SPACE_Y, loopZ * SPACE_Z) + startPosition);
                        palletObject.Color = POSSIBLE_COLORS[randomizer.Next(0, POSSIBLE_COLORS.Length)];
                        palletObject.EnableShaderGeneratedBorder();
                        manipulator.Add(palletObject);

                        // Define animation
                        palletObject.BuildAnimationSequence()
                        .Delay(randomizer.Next(100, 1000))
                        .Apply();
                        palletObject.BuildAnimationSequence()
                        .Scale3DTo(0.5f, TimeSpan.FromSeconds(2.0))
                        .WaitFinished()
                        .Scale3DTo(1f, TimeSpan.FromSeconds(2.0))
                        .ApplyAndRewind();
                    }
                }
            }
        }
Esempio n. 4
0
        public void Test_EventDriven_SimpleAnimation_7()
        {
            // Define animation parameters / objects
            GenericObject genObject = new GenericObject(NamedOrGenericKey.Empty);

            // Define animation sequence
            //  Same as above, just with a wait-finished event here (dynamic wait step)
            genObject.BuildAnimationSequence()
            .Move3DBy(new Vector3(5f, 0f, 0f), TimeSpan.FromMilliseconds(500.0))
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromMilliseconds(1750.0))
            .WaitFinished()
            .RotateEulerAnglesBy(new Vector3(2f, 0f, 0f), TimeSpan.FromMilliseconds(500.0))
            .WaitFinished()
            .Apply();
            genObject.BuildAnimationSequence()
            .Move3DBy(new Vector3(5f, 0f, 0f), TimeSpan.FromMilliseconds(400.0))
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromMilliseconds(1850.0))
            .WaitFinished()
            .RotateEulerAnglesBy(new Vector3(2f, 0f, 0f), TimeSpan.FromMilliseconds(300.0))
            .WaitFinished()
            .ApplyAsSecondary();

            // Perform animation in an event-driven way
            EventDrivenPassInfo passInfo = genObject.AnimationHandler.CalculateEventDriven();

            // Check results
            Assert.True(passInfo.CountSteps == 4);
            Assert.True(passInfo.Steps[0].UpdateTime == TimeSpan.FromMilliseconds(1750.0));
            Assert.True(passInfo.Steps[1].UpdateTime == TimeSpan.FromMilliseconds(100.0));
            Assert.True(passInfo.Steps[2].UpdateTime == TimeSpan.FromMilliseconds(300.0));
            Assert.True(passInfo.Steps[3].UpdateTime == TimeSpan.FromMilliseconds(100.0));
        }
        private async void OnMainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            CtrlRenderPanel.RenderLoop.ClearColor = Color4.CornflowerBlue;

            // Build scene graph
            await CtrlRenderPanel.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.GreenColor;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            Camera3DBase camera = CtrlRenderPanel.Camera;

            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
Esempio n. 6
0
        public async Task Render_Skybox()
        {
            await UnitTestHelper.InitializeWithGrahicsAsync();

            using (MemoryRenderTarget memRenderTarget = new MemoryRenderTarget(1024, 1024))
            {
                memRenderTarget.ClearColor = Color4.CornflowerBlue;

                // Get and configure the camera
                PerspectiveCamera3D camera = memRenderTarget.Camera as PerspectiveCamera3D;
                camera.Position = new Vector3(-3f, -3f, -7f);
                camera.Target   = new Vector3(0f, 0f, 0f);
                camera.UpdateCamera();

                // Define scene
                await memRenderTarget.Scene.ManipulateSceneAsync((manipulator) =>
                {
                    // Create pallet geometry resource
                    PalletType pType      = new PalletType();
                    pType.ContentColor    = Color4.Transparent;
                    var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                        () => new GeometryResource(pType));

                    // Create pallet object
                    GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                    palletObject.Color         = Color4.GreenColor;
                    palletObject.EnableShaderGeneratedBorder();
                    palletObject.BuildAnimationSequence()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                    .ApplyAndRewind();

                    var resSkyboxTexture = manipulator.AddTexture(new Uri("/SeeingSharp.Tests.Rendering;component/Ressources/Textures/Skybox.dds", UriKind.Relative));

                    // Create the skybox on a new layer
                    manipulator.AddLayer("Skybox");
                    SkyboxObject skyboxObject = new SkyboxObject(resSkyboxTexture);
                    manipulator.Add(skyboxObject, "Skybox");
                });

                // Take screenshot
                GDI.Bitmap screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync();

                //screenshot.DumpToDesktop("Blub.png");

                // Calculate and check difference
                bool isNearEqual = BitmapComparison.IsNearEqual(
                    screenshot, Properties.Resources.ReferenceImage_Skybox);
                Assert.True(isNearEqual, "Difference to reference image is to big!");
            }

            // Finishing checks
            Assert.True(GraphicsCore.Current.MainLoop.RegisteredRenderLoopCount == 0, "RenderLoops where not disposed correctly!");
        }
Esempio n. 7
0
        private async void OnMainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (m_panelPainter != null)
            {
                return;
            }

            // Attach the painter to the target render panel
            m_panelPainter = new SeeingSharpPanelPainter(this.RenderTargetPanel);
            m_panelPainter.RenderLoop.ClearColor = Color4.CornflowerBlue;

            // Build scene graph
            await m_panelPainter.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Define a BACKGROUND layer and configure layer IDs
                //  => Ensures correct render order
                SceneLayer bgLayer = manipulator.AddLayer("BACKGROUND");
                manipulator.SetLayerOrderID(bgLayer, 0);
                manipulator.SetLayerOrderID(Scene.DEFAULT_LAYER_NAME, 1);

                // Add the background texture painter to the BACKGROUND layer
                var resBackgroundTexture = manipulator.AddTexture(
                    new AssemblyResourceUriBuilder(
                        "SeeingSharp.Tutorials.Introduction03",
                        true,
                        "Assets/Textures/Background.png"));
                manipulator.Add(new FullscreenTextureObject(resBackgroundTexture), bgLayer.Name);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.GreenColor;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object and add it to the scene
                //  => The DEFAULT layer is used by default
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            Camera3DBase camera = m_panelPainter.Camera;

            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
Esempio n. 8
0
        private static GenericObject DefineAnimation_2Secs()
        {
            // Define animation parameters / objects
            GenericObject genObject = new GenericObject(NamedOrGenericKey.Empty);

            // Define animation sequence (very simple)
            genObject.BuildAnimationSequence()
            .Move3DTo(new Vector3(0.6f, 0f, 0f), new MovementSpeed(0.3f))                          // 20,0 Secs
            .Apply();

            return(genObject);
        }
Esempio n. 9
0
        /// <summary>
        /// Called when the sample has to startup.
        /// </summary>
        /// <param name="targetRenderLoop">The target render loop.</param>
        /// <returns></returns>
        public override async Task OnStartupAsync(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Build dummy scene
            Scene        scene  = targetRenderLoop.Scene;
            Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase;

            // Build scene initially if we are on first load
            if (scene.CountObjects <= 0)
            {
                await scene.ManipulateSceneAsync((manipulator) =>
                {
                    // Create floor
                    SampleSceneBuilder.BuildStandardFloor(
                        manipulator, Scene.DEFAULT_LAYER_NAME);

                    // Create pallet geometry resource
                    PalletType pType      = new PalletType();
                    pType.ContentColor    = Color4.Transparent;
                    var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                        () => new GeometryResource(pType));

                    // Create pallet object
                    GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                    palletObject.Color         = Color4.GreenColor;
                    palletObject.EnableShaderGeneratedBorder();
                    palletObject.BuildAnimationSequence()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                    .WaitFinished()
                    .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                    .ApplyAndRewind();

                    var resSkyboxTexture = manipulator.AddTexture(
                        new AssemblyResourceLink(
                            typeof(SeeingSharpSampleResources),
                            "Textures.SkyBox.dds"));

                    // Create the skybox on a new layer
                    manipulator.AddLayer("Skybox");
                    SkyboxObject skyboxObject = new SkyboxObject(resSkyboxTexture);
                    manipulator.Add(skyboxObject, "Skybox");
                });

                // Configure camera
                camera.Position = new Vector3(5f, 3f, 5f);
                camera.Target   = new Vector3(0f, 2f, 0f);
                camera.UpdateCamera();
            }
        }
Esempio n. 10
0
        private async Task OnStartupAsync_Fallback(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Build dummy scene
            Scene        scene  = targetRenderLoop.Scene;
            Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase;

            await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create floor
                SampleSceneBuilder.BuildStandardFloor(
                    manipulator, Scene.DEFAULT_LAYER_NAME);

                // Define texture and material resource
                var resTexture = manipulator.AddTexture(
                    new AssemblyResourceLink(
                        typeof(SeeingSharpSampleResources),
                        "Textures.NoCaptureDevice.png"));
                var resMaterial = manipulator.AddSimpleColoredMaterial(resTexture);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentMaterial = resMaterial;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
Esempio n. 11
0
        public void Test_EventDriven_SimpleAnimation_3()
        {
            // Define animation parameters / objects
            GenericObject genObject = new GenericObject(NamedOrGenericKey.Empty);

            // Define animation sequence
            //  .. use 3D-Engine GenericObject (animated just like simulation objects)
            genObject.BuildAnimationSequence()
            .Move3DBy(new Vector3(5f, 0f, 0f), TimeSpan.FromMilliseconds(500.0))
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromMilliseconds(750.0))
            .WaitFinished()
            .Apply();

            // Main-Test: Perform animation in an event-driven way
            EventDrivenPassInfo passInfo = genObject.AnimationHandler.CalculateEventDriven();

            // Check results
            Assert.True(passInfo.CountSteps == 1);
            Assert.True(passInfo.Steps[0].UpdateTime == TimeSpan.FromMilliseconds(750.0));
        }
Esempio n. 12
0
        /// <summary>
        /// A method that starts the app view.
        /// </summary>
        public void Run()
        {
            RenderLoop   targetRenderLoop = m_mainWindowPainter.RenderLoop;
            Camera3DBase camera           = targetRenderLoop.Camera;

            // Configure camera
            camera.Position = new Vector3(-5f, -5f, -5f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();

            targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.Transparent;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Position      = new Vector3();
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            }).FireAndForget();

            targetRenderLoop.SceneComponents.Add(
                new FreeMovingCameraComponent());

            m_mainWindow.Activate();
            m_mainWindow.Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessUntilQuit);
        }
Esempio n. 13
0
        /// <summary>
        /// Called when the sample has to startup.
        /// </summary>
        /// <param name="targetRenderLoop">The target render loop.</param>
        public override async Task OnStartupAsync(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Build dummy scene
            Scene        scene  = targetRenderLoop.Scene;
            Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase;

            await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create floor
                SampleSceneBuilder.BuildStandardFloor(
                    manipulator, Scene.DEFAULT_LAYER_NAME);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.Transparent;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
Esempio n. 14
0
        public void Test_EventDriven_SimpleAnimation_5()
        {
            // Define animation parameters / objects
            GenericObject genObject = new GenericObject(NamedOrGenericKey.Empty);

            // Define animation sequence
            //  .. A bit more complicated.. this method uses a fixed wait timer in between. Not all animations before it would be finished
            //  More complicated here: The step "Scale3DTo" is the longest and controls the duration of the second event
            genObject.BuildAnimationSequence()
            .Move3DBy(new Vector3(5f, 0f, 0f), TimeSpan.FromMilliseconds(500.0))
            .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromMilliseconds(1750.0))
            .WaitUntilTimePassed(TimeSpan.FromMilliseconds(600.0))
            .RotateEulerAnglesBy(new Vector3(2f, 0f, 0f), TimeSpan.FromMilliseconds(500.0))
            .WaitFinished()
            .Apply();

            // Perform animation in an event-driven way
            EventDrivenPassInfo passInfo = genObject.AnimationHandler.CalculateEventDriven();

            // Check results
            Assert.True(passInfo.CountSteps == 2);
            Assert.True(passInfo.Steps[0].UpdateTime == TimeSpan.FromMilliseconds(600.0));
            Assert.True(passInfo.Steps[1].UpdateTime == TimeSpan.FromMilliseconds(1150.0));
        }
        /// <summary>
        /// Called when the sample has to startup.
        /// </summary>
        /// <param name="targetRenderLoop">The target render loop.</param>
        public override async Task OnStartupAsync(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Build dummy scene
            Scene        scene  = targetRenderLoop.Scene;
            Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase;

            // Define 2D overlay
            m_solidBrush = new SolidBrushResource(Color4.LightSteelBlue.ChangeAlphaTo(0.7f));
            m_textFormat = new TextFormatResource("Arial", 36);
            m_textBrush  = new SolidBrushResource(Color4.RedColor);
            Action <Graphics2D> draw2DAction = (graphics) =>
            {
                // 2D rendering is made here
                RectangleF d2dRectangle = new RectangleF(
                    10, 10,
                    graphics.ScreenSize.Width - 20,
                    graphics.ScreenSize.Height - 20);
                if (d2dRectangle.Width < 100)
                {
                    return;
                }
                if (d2dRectangle.Height < 100)
                {
                    return;
                }

                // Draw background rectangle
                graphics.FillRoundedRectangle(
                    d2dRectangle,
                    30, 30,
                    m_solidBrush);

                // Draw the text
                d2dRectangle.Inflate(-10, -10);
                d2dRectangle.Y = d2dRectangle.Y + 15f;
                graphics.DrawText("Hello Direct2D!", m_textFormat, d2dRectangle, m_textBrush);
            };

            await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Add the 2D layer to the scene
                manipulator.AddDrawingLayer(draw2DAction);

                // Create floor
                SampleSceneBuilder.BuildStandardFloor(
                    manipulator, Scene.DEFAULT_LAYER_NAME);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.Transparent;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
        /// <summary>
        /// Called when the sample has to startup.
        /// </summary>
        /// <param name="targetRenderLoop">The target render loop.</param>
        public override async Task OnStartupAsync(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Build dummy scene
            Scene        scene  = targetRenderLoop.Scene;
            Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase;

            // 2D rendering is made here
            m_solidBrush = new SolidBrushResource(Color4.Gray);
            m_textFormat = new TextFormatResource("Arial", 36);
            m_textBrush  = new SolidBrushResource(Color4.RedColor);
            Custom2DDrawingLayer d2dDrawingLayer = new Custom2DDrawingLayer((graphics) =>
            {
                RectangleF d2dRectangle = new RectangleF(10, 10, 236, 236);
                graphics.Clear(Color4.LightBlue);
                graphics.FillRoundedRectangle(
                    d2dRectangle, 30, 30,
                    m_solidBrush);

                d2dRectangle.Inflate(-10, -10);
                graphics.DrawText("Hello Direct2D!", m_textFormat, d2dRectangle, m_textBrush);
            });

            // Build 3D scene
            await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create floor
                SampleSceneBuilder.BuildStandardFloor(
                    manipulator, Scene.DEFAULT_LAYER_NAME);

                // Define Direct2D texture resource
                var resD2DTexture = manipulator.AddResource <Direct2DTextureResource>(
                    () => new Direct2DTextureResource(d2dDrawingLayer, 256, 256));
                var resD2DMaterial = manipulator.AddSimpleColoredMaterial(resD2DTexture);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.PalletMaterial  = NamedOrGenericKey.Empty;
                pType.ContentMaterial = resD2DMaterial;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
Esempio n. 17
0
        /// <summary>
        /// Starts and controls the animation for the given object.
        /// </summary>
        /// <param name="targetObject">The object to be animated.</param>
        private async void AttachMoveBehavior(GenericObject targetObject)
        {
            Random randomizer = new Random(Environment.TickCount);

            // Set initial values
            targetObject.Position           = new Vector3(0f, 2f, -2f);
            targetObject.Scaling            = new Vector3(5f, 5f, 5f);
            targetObject.TransformationType = SpacialTransformationType.ScalingTranslationEulerAngles;
            targetObject.RotationEuler      = new Vector3(0f, EngineMath.RAD_270DEG, 0f);
            targetObject.Opacity            = 0f;

            // Create initial animation
            await targetObject.BuildAnimationSequence()
            .Move3DBy(new Vector3(0f, -1.5f, 0f), TimeSpan.FromSeconds(0.5))
            .Scale3DTo(new Vector3(1f, 1f, 1f), TimeSpan.FromSeconds(0.5))
            .ChangeFloatBy(
                () => targetObject.Opacity,
                (actValue) => targetObject.Opacity = actValue,
                1f,
                TimeSpan.FromSeconds(0.5))
            .ApplyAsync();

            // Ensure correct opacity
            targetObject.Opacity = 1f;

            // Accelerate banana
            await targetObject.BuildAnimationSequence()
            .Move3DBy(
                new Vector3(0f, 0f, 1f),
                new MovementSpeed(2.0f, 1.5f))
            .ApplyAsync();

            // Enter looping animation (move around the rectangle)
            do
            {
                await targetObject.BuildAnimationSequence()
                //Move on right line
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_270DEG, 0f), TimeSpan.FromSeconds(0.3))
                .Move3DBy(new Vector3(0f, 0f, 5f), TimeSpan.FromSeconds(3.0))
                .WaitFinished()
                //Move on front line
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(0.3))
                .Move3DBy(new Vector3(-5f, 0f, 0f), TimeSpan.FromSeconds(3.0))
                .Scale3DTo(new Vector3(2f, 2f, 2f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                //Move on Left line
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_90DEG, 0f), TimeSpan.FromSeconds(0.3))
                .Move3DBy(new Vector3(0f, 0f, -5f), TimeSpan.FromSeconds(3.0))
                .Scale3DTo(new Vector3(1f, 1f, 1f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                //Move on bottom line
                .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(0.3))
                .Move3DBy(new Vector3(5f, 0f, 0f), TimeSpan.FromSeconds(3.0))
                .ApplyAsync();
            }while (randomizer.Next(0, 100) > 70);

            // Show remove animation
            await targetObject.BuildAnimationSequence()
            .Move3DBy(new Vector3(1.5f, 0f, 0f), TimeSpan.FromSeconds(0.5))
            .Scale3DTo(new Vector3(5f, 5f, 5f), TimeSpan.FromSeconds(0.5))
            .ChangeFloatBy(
                () => targetObject.Opacity,
                (actValue) => targetObject.Opacity = actValue,
                -1f,
                TimeSpan.FromSeconds(0.5))
            .ApplyAsync();

            // Remove the banana from the scene finally
            await targetObject.Scene.ManipulateSceneAsync((manipulator) =>
            {
                manipulator.Remove(targetObject);
            });
        }
Esempio n. 18
0
        /// <summary>
        /// Called when the sample has to startup.
        /// </summary>
        /// <param name="targetRenderLoop">The target render loop.</param>
        public override async Task OnStartupAsync(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Start the device chooser
            m_deviceChooser = new CaptureDeviceChooser();

            // Show fallback-scene if we don't have a capture device
            if (m_deviceChooser.DeviceCount <= 0)
            {
                await OnStartupAsync_Fallback(targetRenderLoop);

                return;
            }

            // Get and configure the camera
            Camera3DBase camera = targetRenderLoop.Camera as PerspectiveCamera3D;

            camera.Position = new Vector3(0f, 5f, -7f);
            camera.Target   = new Vector3(0f, 0f, 0f);
            camera.UpdateCamera();

            // Open the video file
            m_videoReader = new AsyncRealtimeVideoReader(m_deviceChooser.DeviceInfos.First());
            m_videoReader.VideoReachedEnd += (sender, eArgs) =>
            {
                m_videoReader.SetCurrentPosition(TimeSpan.Zero);
            };

            // Define scene
            await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create floor
                SampleSceneBuilder.BuildStandardFloor(
                    manipulator, Scene.DEFAULT_LAYER_NAME);

                // Define texture and resource
                var resVideoTexture = manipulator.AddResource <VideoTextureResource>(
                    () => new VideoTextureResource(m_videoReader));
                var resVideoMaterial = manipulator.AddSimpleColoredMaterial(resVideoTexture, addToAlpha: 1f);
                var geoResource      = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(new PalletType(
                                                   palletMaterial: NamedOrGenericKey.Empty,
                                                   contentMaterial: resVideoMaterial)));

                // Add the object
                GenericObject newObject = manipulator.AddGeneric(geoResource);
                newObject.RotationEuler = new Vector3(0f, EngineMath.RAD_90DEG / 2f, 0f);
                newObject.Scaling       = new Vector3(2f, 2f, 2f);
                newObject.EnableShaderGeneratedBorder();

                // Start pallet rotating animation
                newObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => newObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });
        }
Esempio n. 19
0
        protected override async void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            // Attach the painter to the target render panel
            m_ctrlRenderControl.RenderLoop.ClearColor = Color4.CornflowerBlue;

            // Build scene graph
            await m_ctrlRenderControl.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Define a BACKGROUND layer and configure layer IDs
                //  => Ensures correct render order
                SceneLayer bgLayer = manipulator.AddLayer("BACKGROUND");
                manipulator.SetLayerOrderID(bgLayer, 0);
                manipulator.SetLayerOrderID(Scene.DEFAULT_LAYER_NAME, 1);

                // Add the background texture painter to the BACKGROUND layer
                var resBackgroundTexture = manipulator.AddTexture(
                    new AssemblyResourceUriBuilder(
                        "SeeingSharp.Tutorials.Introduction04",
                        true,
                        "Assets/Textures/Background.png"));
                manipulator.Add(new FullscreenTextureObject(resBackgroundTexture), bgLayer.Name);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.GreenColor;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object and add it to the scene
                //  => The DEFAULT layer is used by default
                for (int loopX = 0; loopX < 11; loopX++)
                {
                    for (int loopY = 0; loopY < 11; loopY++)
                    {
                        GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                        palletObject.Color         = Color4.GreenColor;
                        palletObject.Position      = new Vector3(
                            -10f + loopX * 2f,
                            -10f + loopY * 2f,
                            0f);
                        palletObject.Tag1 = $"Pallet (X={loopX}, Y={loopY})";
                        palletObject.EnableShaderGeneratedBorder();
                        palletObject.BuildAnimationSequence()
                        .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                        .WaitFinished()
                        .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, EngineMath.RAD_45DEG), TimeSpan.FromSeconds(2.0))
                        .WaitFinished()
                        .RotateEulerAnglesTo(new Vector3(0f, 0f, 0f), TimeSpan.FromSeconds(2.0))
                        .WaitFinished()
                        .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                        .ApplyAndRewind();
                    }
                }
            });

            // Configure camera
            Camera3DBase camera = m_ctrlRenderControl.Camera;

            camera.Position = new Vector3(0f, 0f, -25f);
            camera.Target   = new Vector3(0f, 0f, 0f);
            camera.UpdateCamera();
        }
        /// <summary>
        /// Called when the sample has to startup.
        /// </summary>
        /// <param name="targetRenderLoop">The target render loop.</param>
        public override async Task OnStartupAsync(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Build dummy scene
            Scene        scene  = targetRenderLoop.Scene;
            Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase;

            // Define resources
            m_starBitmap = new StandardBitmapResource(
                new AssemblyResourceLink(
                    typeof(SeeingSharpSampleResources),
                    "Bitmaps.StarColored_128x128.png"));
            m_startBitmapShaded = new GaussianBlurEffectResource(m_starBitmap);
            m_startBitmapShaded.StandardDeviation = 4f;

            // Define 2D overlay
            Action <Graphics2D> draw2DAction = (graphics) =>
            {
                graphics.DrawBitmap(
                    m_starBitmap,
                    new Vector2(10f, 10f),
                    1f,
                    BitmapInterpolationMode.Linear);
                graphics.DrawImage(
                    m_startBitmapShaded,
                    new Vector2(150f, 10f));
            };

            await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Add the 2D layer to the scene
                manipulator.AddDrawingLayer(draw2DAction);

                // Create floor
                SampleSceneBuilder.BuildStandardFloor(
                    manipulator, Scene.DEFAULT_LAYER_NAME);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.ContentColor    = Color4.Transparent;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }
Esempio n. 21
0
        /// <summary>
        /// Called when the sample has to startup.
        /// </summary>
        /// <param name="targetRenderLoop">The target render loop.</param>
        public override async Task OnStartupAsync(RenderLoop targetRenderLoop)
        {
            targetRenderLoop.EnsureNotNull(nameof(targetRenderLoop));

            // Build dummy scene
            Scene        scene  = targetRenderLoop.Scene;
            Camera3DBase camera = targetRenderLoop.Camera as Camera3DBase;

            // Create all objects for animation
            List <Vector2> starLocations = new List <Vector2>();

            m_starBitmap = new StandardBitmapResource(
                new AssemblyResourceLink(
                    typeof(SeeingSharpSampleResources),
                    "Bitmaps.StarColored_128x128.png"));
            m_borderBrush = new SolidBrushResource(Color4.SteelBlue);
            Random starCreateRandomizer = new Random();

            // 2D rendering is made here
            Custom2DDrawingLayer d2dDrawingLayer = new Custom2DDrawingLayer((graphics) =>
            {
                // Draw background
                RectangleF d2dRectangle = new RectangleF(10, 10, 236, 236);
                graphics.Clear(Color4.LightBlue);

                // Dynamically create new stars
                if ((starLocations.Count < 50) &&
                    (starCreateRandomizer.Next(0, 100) <= 70))
                {
                    starLocations.Add(new Vector2(
                                          (float)starCreateRandomizer.Next(0, 256),
                                          -32f));
                }

                // Update and draw all stars
                for (int loopStar = 0; loopStar < starLocations.Count; loopStar++)
                {
                    Vector2 actLocation = starLocations[loopStar];
                    if (actLocation.Y > 270f)
                    {
                        starLocations.RemoveAt(loopStar);
                        loopStar--;
                        continue;
                    }

                    actLocation.Y           = actLocation.Y + 4f;
                    starLocations[loopStar] = actLocation;

                    graphics.DrawBitmap(
                        m_starBitmap,
                        new RectangleF(
                            actLocation.X - 16f, actLocation.Y - 16f,
                            32f, 32f),
                        0.6f,
                        BitmapInterpolationMode.Linear);
                }

                // Draw a simple border
                graphics.DrawRectangle(graphics.ScreenBounds, m_borderBrush, 2f);
            });

            // Build 3D scene
            await targetRenderLoop.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create floor
                SampleSceneBuilder.BuildStandardFloor(
                    manipulator, Scene.DEFAULT_LAYER_NAME);

                // Define Direct2D texture resource
                var resD2DTexture = manipulator.AddResource <Direct2DTextureResource>(
                    () => new Direct2DTextureResource(d2dDrawingLayer, 256, 256));
                var resD2DMaterial = manipulator.AddSimpleColoredMaterial(resD2DTexture);

                // Create pallet geometry resource
                PalletType pType      = new PalletType();
                pType.PalletMaterial  = NamedOrGenericKey.Empty;
                pType.ContentMaterial = resD2DMaterial;
                var resPalletGeometry = manipulator.AddResource <GeometryResource>(
                    () => new GeometryResource(pType));

                // Create pallet object
                GenericObject palletObject = manipulator.AddGeneric(resPalletGeometry);
                palletObject.Color         = Color4.GreenColor;
                palletObject.EnableShaderGeneratedBorder();
                palletObject.BuildAnimationSequence()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_180DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .RotateEulerAnglesTo(new Vector3(0f, EngineMath.RAD_360DEG, 0f), TimeSpan.FromSeconds(2.0))
                .WaitFinished()
                .CallAction(() => palletObject.RotationEuler = Vector3.Zero)
                .ApplyAndRewind();
            });

            // Configure camera
            camera.Position = new Vector3(2f, 2f, 2f);
            camera.Target   = new Vector3(0f, 0.5f, 0f);
            camera.UpdateCamera();
        }