Exemplo n.º 1
0
        private void LoadHeightMap( System.IO.FileInfo _FileName )
        {
            try {
                tabControlGenerators.Enabled = false;

                // Dispose of existing resources
                if ( m_imageSourceHeightMap != null )
                    m_imageSourceHeightMap.Dispose();
                m_imageSourceHeightMap = null;

                if ( m_textureTarget_CPU != null )
                    m_textureTarget_CPU.Dispose();
                m_textureTarget_CPU = null;
                if ( m_textureTarget0 != null )
                    m_textureTarget0.Dispose();
                m_textureTarget0 = null;
                if ( m_textureTarget1 != null )
                    m_textureTarget1.Dispose();
                m_textureTarget1 = null;
                if ( m_textureSourceHeightMap != null )
                    m_textureSourceHeightMap.Dispose();
                m_textureSourceHeightMap = null;

                // Load the source image
                m_SourceFileName = _FileName;
                m_imageSourceHeightMap = new ImageUtility.ImageFile( _FileName );
                outputPanelInputHeightMap.Image = m_imageSourceHeightMap;

                W = m_imageSourceHeightMap.Width;
                H = m_imageSourceHeightMap.Height;

                // Build the source texture  assuming the image is in linear space
                float4[]	scanline = new float4[W];

                PixelsBuffer	SourceHeightMap = new PixelsBuffer( W*H*4 );
                using ( System.IO.BinaryWriter Wr = SourceHeightMap.OpenStreamWrite() )
                    for ( uint Y=0; Y < H; Y++ ) {
                        m_imageSourceHeightMap.ReadScanline( Y, scanline );
                        for ( int X=0; X < W; X++ )
                            Wr.Write( scanline[X].x );
                    }

                m_textureSourceHeightMap = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, false, new PixelsBuffer[] { SourceHeightMap } );

                // Build the target UAV & staging texture for readback
                m_textureTarget0 = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, true, null );
                m_textureTarget1 = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null );
                m_textureTarget_CPU = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, true, false, null );

                tabControlGenerators.Enabled = true;
                buttonGenerate.Focus();
            } catch ( Exception _e ) {
                MessageBox( "An error occurred while opening the image:\n\n", _e );
            }
        }
Exemplo n.º 2
0
        private void LoadNormalMap( System.IO.FileInfo _FileName )
        {
            try {
                // Dispose of existing resources
                if ( m_imageSourceNormal != null )
                    m_imageSourceNormal.Dispose();
                m_imageSourceNormal = null;
                if ( m_TextureSourceNormal != null )
                    m_TextureSourceNormal.Dispose();
                m_TextureSourceNormal = null;

                // Load the source image
                m_imageSourceNormal = new ImageUtility.ImageFile( _FileName );
                imagePanelNormalMap.Image = m_imageSourceNormal;

                uint	W = m_imageSourceNormal.Width;
                uint	H = m_imageSourceNormal.Height;

                // Build the source texture assuming the image is in linear space
                float4[]	scanline = new float4[W];

                PixelsBuffer	sourceNormalMap = new PixelsBuffer( W*H*16 );
                using ( System.IO.BinaryWriter Wr = sourceNormalMap.OpenStreamWrite() )
                    for ( uint Y=0; Y < H; Y++ ) {
                        m_imageSourceNormal.ReadScanline( Y, scanline );
                        for ( uint X=0; X < W; X++ ) {
                            Wr.Write( scanline[X].x );
                            Wr.Write( scanline[X].y );
                            Wr.Write( scanline[X].z );
                            Wr.Write( 1.0f );
                        }
                    }

                m_TextureSourceNormal = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, false, new PixelsBuffer[] { sourceNormalMap } );
            }
            catch ( Exception _e )
            {
                MessageBox( "An error occurred while opening the normal map \"" + _FileName.FullName + "\":\n\n", _e );
            }
        }
Exemplo n.º 3
0
        private void LoadThicknessMap( System.IO.FileInfo _FileName )
        {
            try {
                groupBoxOptions.Enabled = false;

                // Dispose of existing resources
                if ( m_ImageSourceThickness != null )
                    m_ImageSourceThickness.Dispose();
                m_ImageSourceThickness = null;
                if ( m_TextureSourceThickness != null )
                    m_TextureSourceThickness.Dispose();
                m_TextureSourceThickness = null;

                if ( m_TextureSourceVisibility != null )
                    m_TextureSourceVisibility.Dispose();
                m_TextureSourceVisibility = null;

                if ( m_TextureTarget_CPU != null ) {
                    m_TextureTarget_CPU.Dispose();
                }
                m_TextureTarget_CPU = null;

                if ( m_TextureFilteredThickness != null )
                    m_TextureFilteredThickness.Dispose();
                m_TextureFilteredThickness = null;

                if ( m_TextureTargets[0][0] != null ) {
                    m_TextureTargets[0][0].Dispose();
                    m_TextureTargets[0][1].Dispose();
                    m_TextureTargets[1][0].Dispose();
                    m_TextureTargets[1][1].Dispose();
                    m_TextureTargets[2][0].Dispose();
                    m_TextureTargets[2][1].Dispose();
                }
                m_TextureTargets[0][0] = null;
                m_TextureTargets[0][1] = null;
                m_TextureTargets[1][0] = null;
                m_TextureTargets[1][1] = null;
                m_TextureTargets[2][0] = null;
                m_TextureTargets[2][1] = null;

                if ( m_TextureTargetCombined != null )
                    m_TextureTargetCombined.Dispose();
                m_TextureTargetCombined = null;

                // Load the source image
                m_SourceFileName = _FileName;
                m_ImageSourceThickness = new ImageUtility.ImageFile( _FileName );
                imagePanelThicknessMap.Image = m_ImageSourceThickness;

                W = m_ImageSourceThickness.Width;
                H = m_ImageSourceThickness.Height;

                // Build the source texture assuming the image is in linear space
                float4[]	scanline = new float4[W];

                PixelsBuffer	sourceHeightMap = new PixelsBuffer( W*H*4 );
                using ( System.IO.BinaryWriter Wr = sourceHeightMap.OpenStreamWrite() )
                    for ( uint Y=0; Y < H; Y++ ) {
                        m_ImageSourceThickness.ReadScanline( Y, scanline );
                        for ( uint X=0; X < W; X++ ) {
                            Wr.Write( scanline[X].x );
                        }
                    }

                m_TextureSourceThickness = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, false, new PixelsBuffer[] { sourceHeightMap } );

                // Build the 3D visibility texture
                m_TextureSourceVisibility = new Texture3D( m_Device, W, H, VISIBILITY_SLICES, 1, PIXEL_FORMAT.R16_FLOAT, false, true, null );

                // Build the target UAV & staging texture for readback
                m_TextureFilteredThickness = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, true, null );

                for ( int i=0; i < 3; i++ ) {
                    m_TextureTargets[i][0] = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null );
                    m_TextureTargets[i][1] = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null );
                }
                m_TextureTargetCombined = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null );
                m_TextureTarget_CPU = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, true, false, null );

                groupBoxOptions.Enabled = true;
                buttonGenerate.Focus();
            }
            catch ( Exception _e )
            {
                MessageBox( "An error occurred while opening the thickness map \"" + _FileName.FullName + "\":\n\n", _e );
            }
        }
Exemplo n.º 4
0
        private void LoadAlbedoMap( System.IO.FileInfo _FileName )
        {
            try {
                // Dispose of existing resources
                if ( m_imageSourceAlbedo != null )
                    m_imageSourceAlbedo.Dispose();
                m_imageSourceAlbedo = null;
                if ( m_TextureSourceAlbedo != null )
                    m_TextureSourceAlbedo.Dispose();
                m_TextureSourceAlbedo = null;

                // Load the source image
                m_imageSourceAlbedo = new ImageUtility.ImageFile( _FileName );
                imagePanelAlbedoMap.Image = m_imageSourceAlbedo;

                uint	W = m_imageSourceAlbedo.Width;
                uint	H = m_imageSourceAlbedo.Height;

                // Build the source texture assuming the image's color profile
                float4[]	scanline = new float4[W];
                float4		linearRGB = float4.Zero;
                ImageUtility.ColorProfile	imageProfile = m_imageSourceAlbedo.ColorProfile;
            //				ImageUtility.ColorProfile	imageProfile = m_sRGBProfile;

            // 				float4[,]	ContentRGB = new float4[W,H];
            // 				m_LinearProfile.XYZ2RGB( m_imageSourceAlbedo.ContentXYZ, ContentRGB );

                PixelsBuffer	SourceMap = new PixelsBuffer( W*H*16 );
                using ( System.IO.BinaryWriter Wr = SourceMap.OpenStreamWrite() )
                    for ( uint Y=0; Y < H; Y++ ) {
                        m_imageSourceAlbedo.ReadScanline( Y, scanline );
                        for ( uint X=0; X < W; X++ ) {
                            imageProfile.GammaRGB2LinearRGB( scanline[X], ref linearRGB );
                            Wr.Write( linearRGB.x );
                            Wr.Write( linearRGB.y );
                            Wr.Write( linearRGB.z );
                            Wr.Write( linearRGB.w );
                        }
                    }

                m_TextureSourceAlbedo = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, false, new PixelsBuffer[] { SourceMap } );
            }
            catch ( Exception _e ) {
                MessageBox( "An error occurred while opening the albedo map \"" + _FileName.FullName + "\":\n\n", _e );
            }
        }
Exemplo n.º 5
0
        private void LoadNormalMap( System.IO.FileInfo _FileName )
        {
            try {
                // Dispose of existing resources
                if ( m_imageSourceNormal != null )
                    m_imageSourceNormal.Dispose();
                m_imageSourceNormal = null;

                if ( m_TextureSourceNormal != null )
                    m_TextureSourceNormal.Dispose();
                m_TextureSourceNormal = null;

                // Load the source image
                // Assume it's in linear space (all normal maps should be in linear space, with the default value being (0.5, 0.5, 1))
                m_imageSourceNormal = new ImageUtility.ImageFile( _FileName );
                imagePanelNormalMap.Bitmap = m_imageSourceNormal.AsBitmap;

                uint	W = m_imageSourceNormal.Width;
                uint	H = m_imageSourceNormal.Height;

                // Build the source texture
                float4[]	scanline = new float4[W];

                Renderer.PixelsBuffer	SourceNormalMap = new Renderer.PixelsBuffer( W*H*4*4 );
                using ( System.IO.BinaryWriter Wr = SourceNormalMap.OpenStreamWrite() )
                    for ( int Y=0; Y < H; Y++ ) {
                        m_imageSourceNormal.ReadScanline( (uint) Y, scanline );
                        for ( int X=0; X < W; X++ ) {
                            float	Nx = 2.0f * scanline[X].x - 1.0f;
                            float	Ny = 1.0f - 2.0f * scanline[X].y;
                            float	Nz = 2.0f * scanline[X].z - 1.0f;
                            Wr.Write( Nx );
                            Wr.Write( Ny );
                            Wr.Write( Nz );
                            Wr.Write( 1.0f );
                        }
                    }

                m_TextureSourceNormal = new Renderer.Texture2D( m_device, W, H, 1, 1, Renderer.PIXEL_FORMAT.RGBA32_FLOAT, false, false, new Renderer.PixelsBuffer[] { SourceNormalMap } );

            } catch ( Exception _e ) {
                MessageBox( "An error occurred while opening the image:\n\n", _e );
            }
        }