Exemplo n.º 1
0
        public override void Draw(float time)
        {
            var world = Matrix.Translation(0, 0, 50) * Matrix.RotationY(time);

            // Render cubemap.
            _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, CubeMapSize, CubeMapSize, 0.0f, 1.0f));
            _deviceContext.OutputMerger.SetTargets(_depthViewCube, _renderTargetViewCube);
            _deviceContext.ClearDepthStencilView(_depthViewCube, DepthStencilClearFlags.Depth, 1.0f, 0);
            _deviceContext.ClearRenderTargetView(_renderTargetViewCube, Color4.CornflowerBlue);
            _deviceContext.VertexShader.Shader   = _vertexShaderCubeMap;
            _deviceContext.GeometryShader.Shader = _geometryShaderCubeMap;
            _deviceContext.PixelShader.Shader    = _pixelShaderCubeMap;
            _deviceContext.PixelShader.SetShaderResources(1, null);
            _vertexShaderData.World = world;
            _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjectionCube;
            _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData);

            var geometryShaderData = new GeometryShaderData
            {
                Matrix1 = world * _view1 * _projectionCube,
                Matrix2 = world * _view2 * _projectionCube,
                Matrix3 = world * _view3 * _projectionCube,
                Matrix4 = world * _view4 * _projectionCube,
                Matrix5 = world * _view5 * _projectionCube,
                Matrix6 = world * _view6 * _projectionCube
            };

            _deviceContext.SetBufferData(_geometryConstantBuffer, ref geometryShaderData);
            _model.Draw(_deviceContext);

            // Render scene.
            _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, Width, Height, 0.0f, 1.0f));
            _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView);
            _deviceContext.ClearDepthStencilView(_depthView, DepthStencilClearFlags.Depth, 1.0f, 0);
            _deviceContext.ClearRenderTargetView(_renderTargetView, Color4.Blue);

            // Draw rotating teapot.
            _deviceContext.VertexShader.Shader   = _vertexShaderStandard;
            _deviceContext.GeometryShader.Shader = null;
            _deviceContext.PixelShader.Shader    = _pixelShaderStandard;
            _vertexShaderData.World = world;
            _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection;
            _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData);
            _model.Draw(_deviceContext);

            // Draw stationary teapot.
            _deviceContext.VertexShader.Shader   = _vertexShaderStandard;
            _deviceContext.GeometryShader.Shader = null;
            _deviceContext.PixelShader.Shader    = _pixelShaderReflective;
            _vertexShaderData.World = Matrix.Identity;
            _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection;
            _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData);
            _deviceContext.PixelShader.SetShaderResources(1, _resourceViewCube);
            _model.Draw(_deviceContext);

            // Present!
            _deviceContext.Present(_swapChain);

            base.Draw(time);
        }
        public override void Draw(float time)
        {
            var world = Matrix.Translation(0, 0, 50) * Matrix.RotationY(time);

            // Render cubemap.
            _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, CubeMapSize, CubeMapSize, 0.0f, 1.0f));
            _deviceContext.OutputMerger.SetTargets(_depthViewCube, _renderTargetViewCube);
            _deviceContext.ClearDepthStencilView(_depthViewCube, DepthStencilClearFlags.Depth, 1.0f, 0);
            _deviceContext.ClearRenderTargetView(_renderTargetViewCube, Color4.CornflowerBlue);
            _deviceContext.VertexShader.Shader = _vertexShaderCubeMap;
            _deviceContext.GeometryShader.Shader = _geometryShaderCubeMap;
            _deviceContext.PixelShader.Shader = _pixelShaderCubeMap;
            _deviceContext.PixelShader.SetShaderResources(1, null);
            _vertexShaderData.World = world;
            _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjectionCube;
            _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData);

            var geometryShaderData = new GeometryShaderData
            {
                Matrix1 = world * _view1 * _projectionCube,
                Matrix2 = world * _view2 * _projectionCube,
                Matrix3 = world * _view3 * _projectionCube,
                Matrix4 = world * _view4 * _projectionCube,
                Matrix5 = world * _view5 * _projectionCube,
                Matrix6 = world * _view6 * _projectionCube
            };
            _deviceContext.SetBufferData(_geometryConstantBuffer, ref geometryShaderData);
            _model.Draw(_deviceContext);

            // Render scene.
            _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, Width, Height, 0.0f, 1.0f));
            _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView);
            _deviceContext.ClearDepthStencilView(_depthView, DepthStencilClearFlags.Depth, 1.0f, 0);
            _deviceContext.ClearRenderTargetView(_renderTargetView, Color4.Blue);

            // Draw rotating teapot.
            _deviceContext.VertexShader.Shader = _vertexShaderStandard;
            _deviceContext.GeometryShader.Shader = null;
            _deviceContext.PixelShader.Shader = _pixelShaderStandard;
            _vertexShaderData.World = world;
            _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection;
            _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData);
		    _model.Draw(_deviceContext);

            // Draw stationary teapot.
            _deviceContext.VertexShader.Shader = _vertexShaderStandard;
            _deviceContext.GeometryShader.Shader = null;
            _deviceContext.PixelShader.Shader = _pixelShaderReflective;
            _vertexShaderData.World = Matrix.Identity;
            _vertexShaderData.WorldViewProjection = _vertexShaderData.World * _viewProjection;
            _deviceContext.SetBufferData(_vertexConstantBuffer, ref _vertexShaderData);
            _deviceContext.PixelShader.SetShaderResources(1, _resourceViewCube);
            _model.Draw(_deviceContext);

			// Present!
            _deviceContext.Present(_swapChain);

			base.Draw(time);
		}