private bool Render()
        {
            // Clear the scene.
            D3D.BeginScene(0.0f, 0.0f, 1.0f, 1.0f);

            // Generate the view matrix based on the camera's position.
            Camera.Render();

            // Get the world, view, projection, ortho, and base view matrices from the camera and Direct3D objects.
            Matrix worldMatrix      = D3D.WorldMatrix;
            Matrix viewCameraMatrix = Camera.ViewMatrix;
            Matrix projectionMatrix = D3D.ProjectionMatrix;
            Matrix orthoMatrix      = D3D.OrthoMatrix;
            Matrix baseViewMatrix   = Camera.BaseViewMatrix;

            // Render the ground model.
            GroundModel.Render(D3D.DeviceContext);
            ShaderManager.RenderTextureShader(D3D.DeviceContext, GroundModel.IndexCount, worldMatrix, viewCameraMatrix, projectionMatrix, GroundModel.ColourTexture.TextureResource);

            // Turn on the alpha-to-coverage blending.
            D3D.EnableSecondBlendState();

            // Render the foliage.
            Foliage.Render(D3D.DeviceContext);
            if (!ShaderManager.RenderFoliageShader(D3D.DeviceContext, Foliage.VertexCount, Foliage.InstanceCount, viewCameraMatrix, projectionMatrix, Foliage.Texture.TextureResource))
            {
                return(false);
            }

            // Turn off the alpha blending.
            D3D.TurnOffAlphaBlending();

            // Render the user interface.
            UserInterface.Render(D3D, ShaderManager, worldMatrix, baseViewMatrix, orthoMatrix);

            // Present the rendered scene to the screen.
            D3D.EndScene();

            return(true);
        }
예제 #2
0
파일: Window.cs 프로젝트: Dmihawk/Terrain
        private bool Render()
        {
            _directX.BeginScene(new Color4(0.0f, 0.0f, 0.0f, 1.0f));

            _camera.Render();

            var worldMatrix      = _directX.WorldMatrix;
            var viewCameraMatrix = _camera.ViewMatrix;
            var projectionMatrix = _directX.ProjectionMatrix;
            var orthoMatrix      = _directX.OrthoMatrix;
            var baseViewMatrix   = _camera.BaseViewMatrix;

            //_groundModel.Render(_directX.DeviceContext);
            //_shaderManager.RenderTextureShader(_directX.DeviceContext, _groundModel.IndexCount, worldMatrix, viewCameraMatrix, projectionMatrix, _groundModel.Texture.TextureResource);

            var ambientColour = new Color4(0.05f, 0.05f, 0.05f, 1.0f);
            //var diffuseColour = new Color4(1.0f, 1.0f, 1.0f, 1.0f);
            //var diffuseColour = new Color4(1.0f, 1.0f, 1.0f, 1.0f);
            //var direction = new Vector3(-0.5f, -1.0f, 0.0f);

            var direction     = TimeOfDay.GetSunDirection();
            var diffuseColour = TimeOfDay.AmbientColour;

            var result = true;

            Matrix.Translation(_camera.Position.X, _camera.Position.Y, _camera.Position.Z, out worldMatrix);

            _directX.SetCulling(false);
            _directX.SetZBuffer(false);

            _skyDome.Render(_directX.DeviceContext);
            //result = _shaderManager.RenderSkyDomeShader(_directX.DeviceContext, _skyDome.IndexCount, worldMatrix, viewCameraMatrix, projectionMatrix, _skyDome.ApexColour, _skyDome.CenterColour);
            result = _shaderManager.RenderSkyDomeShader(_directX.DeviceContext, _skyDome.IndexCount, worldMatrix, viewCameraMatrix, projectionMatrix, TimeOfDay.SkyColour, TimeOfDay.HorizonColour);

            _directX.SetCulling(true);

            _directX.EnableCloudBlendState();

            _skyPlane.Render(_directX.DeviceContext);
            //result &= _shaderManager.RenderSkyPlaneShader(_directX.DeviceContext, _skyPlane.IndexCount, worldMatrix, viewCameraMatrix, projectionMatrix, _skyPlane.CloudTexture.TextureResource, _skyPlane.PerturbTexture.TextureResource, _skyPlane.Translation, _skyPlane.Scale, _skyPlane.Brightness);
            result &= _shaderManager.RenderSkyPlaneShader(_directX.DeviceContext, _skyPlane.IndexCount, worldMatrix, viewCameraMatrix, projectionMatrix, _skyPlane.CloudTexture.TextureResource, _skyPlane.PerturbTexture.TextureResource, _skyPlane.Translation, _skyPlane.Scale, TimeOfDay.CloudBrightness);

            worldMatrix = _directX.WorldMatrix;

            _directX.SetZBuffer(true);

            _directX.EnableSecondBlendState();

            _foliage.Render(_directX.DeviceContext);
            result &= _shaderManager.RenderFoliageShader(_directX.DeviceContext, _foliage.VertexCount, _foliage.InstanceCount, viewCameraMatrix, projectionMatrix, _foliage.Texture.TextureResource);

            _directX.SetAlphaBlending(false);

            _terrain.Render(_directX.DeviceContext);
            result = _shaderManager.RenderTerrainShader(_directX.DeviceContext, _terrain.IndexCount, worldMatrix, viewCameraMatrix, projectionMatrix, ambientColour, diffuseColour, direction, _terrain.Texture.TextureResource);

            _directX.SetZBuffer(false);
            _directX.SetAlphaBlending(true);

            _userInterface.Render(_directX, _shaderManager, worldMatrix, baseViewMatrix, orthoMatrix);

            _directX.SetAlphaBlending(false);
            _directX.SetZBuffer(true);

            _directX.EndScene();

            return(result);
        }