Beispiel #1
0
        /// <summary>
        /// update cameras.
        /// </summary>
        public void Update(GameTime gameTime)
        {
            // Update the current camera
            ViewCamera viewCamera = CurrentCamera;

            for (int i = 0; i < viewCamera.Count; i++)
            {
                CameraBase camera = viewCamera.GetCamera(i);
                camera.Update(gameTime);
            }

            // Update scene models in the render context
            renderContext.Update(gameTime);
        }
        /// <summary>
        /// draws every scene node which is attached to the scene node.
        /// Draws in order of 3D scene node, 2D scene node, and overlay text.
        /// When there are more than one view cameras that have registered
        /// to the 3D scene, Viewport is applied to the 3D scene node,
        /// which is drawn as many as the number of the view camera.
        /// When render event handler has been registered, it is called
        /// before or after drawing.
        /// </summary>
        public override void Draw(GameTime gameTime)
        {
            //  Set to render information
            renderTracer.Device      = FrameworkCore.Game.GraphicsDevice;
            renderTracer.GameTime    = gameTime;
            renderTracer.SpriteBatch = SpriteBatch;
            renderTracer.Fog         = FrameworkCore.Viewer.BasicFog;
            renderTracer.Lighting    = FrameworkCore.Viewer.BasicLighting;

            ClearBackBuffer();

            if (RenderingPreDrawScene != null)
            {
                RenderingPreDrawScene(this, EventArgs.Empty);
            }

            //  3D Render
            {
                if (RenderingPreDraw3D != null)
                {
                    RenderingPreDraw3D(this, EventArgs.Empty);
                }

                //  process multiple camera
                for (int i = 0; i < FrameworkCore.CurrentCamera.Count; i++)
                {
                    ViewCamera viewCamera = FrameworkCore.Viewer.CurrentCamera;
                    CameraBase camera     = viewCamera.GetCamera(i);

                    renderTracer.View       = camera.ViewMatrix;
                    renderTracer.ViewInvert = Matrix.Invert(camera.ViewMatrix);
                    renderTracer.Projection = camera.ProjectionMatrix;

                    // Update frustum
                    UpdateFrustum(camera.ViewMatrix, camera.ProjectionMatrix);
                    renderTracer.Frustum = this.Frustum;

                    //  Set to each viewport
                    ApplyViewport(viewCamera.GetViewport(i));

                    //  Render the 3D scene
                    Draw3D(renderTracer);
                }

                //  restore to default viewport
                ApplyViewport(FrameworkCore.DefaultViewport);

                if (RenderingPostDraw3D != null)
                {
                    RenderingPostDraw3D(this, EventArgs.Empty);
                }
            }

            //  2D Render
            {
                if (RenderingPreDraw2D != null)
                {
                    RenderingPreDraw2D(this, EventArgs.Empty);
                }

                //  Render the 2D scene
                Draw2D(renderTracer);

                if (RenderingPostDraw2D != null)
                {
                    RenderingPostDraw2D(this, EventArgs.Empty);
                }
            }

            if (RenderingPostDrawScene != null)
            {
                RenderingPostDrawScene(this, EventArgs.Empty);
            }

            // Display overlaped texts or others
            DrawOverlayText(gameTime);

            // Draw other components
            base.Draw(gameTime);
        }