Пример #1
0
        public override void BeginRenderObject(Material material)
        {
            effect.SetValue("world", renderer.WorldMatrix);
            effect.SetValue("worldViewProj", renderer.WorldViewProjectionMatrix);

            effect.CommitChanges();
        }
Пример #2
0
        public override void BeginRenderObject( Material material )
        {
            effect.SetValue( "world", renderer.WorldMatrix );
            effect.SetValue( "worldViewProj", renderer.WorldViewProjectionMatrix );
            effect.SetValue( "diffuseMap", material.Textures[ 0 ] );
            effect.SetValue( "normalMap", material.Textures[ 1 ] );

            Vector4[] lightPos = new Vector4[ 4 ];
            Vector4[] lightColor = new Vector4[ 4 ];
            float[] range = new float[ 4 ];

            for ( int i = 0; i < renderer.Lights.Count && i < 4; ++i )
            {
                lightPos[ i ] = new Vector4( renderer.Lights[ i ].Position.X,
                    renderer.Lights[ i ].Position.Y, 1.0f, 1.0f );
                lightColor[ i ] = new Vector4( ( float )renderer.Lights[ i ].Color.R / 255.0f,
                    ( float )renderer.Lights[ i ].Color.G / 255.0f,
                    ( float )renderer.Lights[ i ].Color.B / 255.0f,
                    ( float )renderer.Lights[ i ].Color.A / 255.0f );
                range[ i ] = renderer.Lights[ i ].Range;
            }

            effect.SetValue( "lightPos", lightPos );
            effect.SetValue( "lightColor", lightColor );
            effect.SetValue( "range", range );
            effect.SetValue( "numActiveLights", renderer.Lights.Count );

            effect.CommitChanges();
        }
Пример #3
0
        public override void BeginRenderObject( Material material, List<object> extraData )
        {
            effect.SetValue( "world", renderer.WorldMatrix );
            effect.SetValue( "worldViewProj", renderer.WorldViewProjectionMatrix );
            effect.SetValue( "water", material.Textures[ 0 ] );
            effect.SetValue( "sand", material.Textures[ 1 ] );
            effect.SetValue( "timer", time );

            if ( extraData.Count > 0 )
            {
                Vector2 texCoordScroll = ( Vector2 )extraData[ 0 ];
                effect.SetValue( "texCoordScroll", new Vector4( texCoordScroll.X, texCoordScroll.Y, 0.0f, 0.0f ) );
            }

            if ( renderer.Lights.Count > 0 )
            {
                effect.SetValue( "lightPos", new Vector4( renderer.Lights[ 0 ].Position.X,
                    renderer.Lights[ 0 ].Position.Y, 1.0f, 1.0f ) );
                effect.SetValue( "lightColor", new Vector4( ( float )renderer.Lights[ 0 ].Color.R / 255.0f,
                    ( float )renderer.Lights[ 0 ].Color.G / 255.0f,
                    ( float )renderer.Lights[ 0 ].Color.B / 255.0f,
                    ( float )renderer.Lights[ 0 ].Color.A / 255.0f ) );
                effect.SetValue( "range", renderer.Lights[ 0 ].Range );
            }

            effect.CommitChanges();
        }
Пример #4
0
        public override void BeginRenderObject( Material material )
        {
            effect.SetValue( "world", renderer.WorldMatrix );
            effect.SetValue( "worldViewProj", renderer.WorldViewProjectionMatrix );
            effect.SetValue( "water", material.Textures[ 0 ] );
            effect.SetValue( "sand", material.Textures[ 1 ] );
            effect.SetValue( "timer", time );

            if ( renderer.Lights.Count > 0 )
            {
                effect.SetValue( "lightPos", new Vector4( renderer.Lights[ 0 ].Position.X,
                    renderer.Lights[ 0 ].Position.Y, 1.0f, 1.0f ) );
                effect.SetValue( "lightColor", new Vector4( ( float )renderer.Lights[ 0 ].Color.R / 255.0f,
                    ( float )renderer.Lights[ 0 ].Color.G / 255.0f,
                    ( float )renderer.Lights[ 0 ].Color.B / 255.0f,
                    ( float )renderer.Lights[ 0 ].Color.A / 255.0f ) );
                effect.SetValue( "range", renderer.Lights[ 0 ].Range );
            }

            effect.CommitChanges();
        }
Пример #5
0
Файл: Menu.cs Проект: zpconn/Gas
            private void CreateTextSurface( string text )
            {
                Material textMat = new Material( renderer );
                textMat.VisualEffectName = "lighting";

                Texture textTex = new Texture( renderer, pressedSurf.Size.Width, pressedSurf.Size.Height,
                    true );

                renderer.SaveRenderTarget();
                textTex.SetAsRenderTarget();
                renderer.Clear( Microsoft.DirectX.Direct3D.ClearFlags.Target, Color.FromArgb( 0, 0, 0, 0 ),
                    1.0f, 0 );

                renderer.Begin( null );
                font.RenderTextCentered( new Vector2( pressedSurf.Size.Width / 2, pressedSurf.Size.Height / 2 ),
                    text, Color.White, false );
                renderer.End();

                renderer.RestoreRenderTarget();

                textMat.Textures[ 0 ] = textTex;
                renderer.AddMaterial( textMat, typeof( Button ).ToString() + ". Text: " + text );

                textSurf = new Surface( renderer, typeof( Button ).ToString() + ". Text: " + text,
                    pressedSurf.Size );
            }
Пример #6
0
        public static Material FromFile( Renderer renderer, string xmlFilename )
        {
            if ( renderer == null )
                throw new ArgumentNullException( "renderer",
                    "Cannot create a material with a null renderer reference." );

            if ( String.IsNullOrEmpty( xmlFilename ) )
                throw new ArgumentNullException( "xmlFilename",
                    "Cannot load a material without a valid filename." );

            if ( !File.Exists( xmlFilename ) )
                throw new FileNotFoundException( xmlFilename );

            Material material = new Material( renderer );
            XmlTextReader reader = new XmlTextReader( xmlFilename );

            while ( reader.Read() )
            {
                if ( reader.NodeType == XmlNodeType.Element )
                {
                    if ( reader.LocalName == "Ambient" )
                    {
                        int a = int.Parse( reader.GetAttribute( 0 ) );
                        int r = int.Parse( reader.GetAttribute( 1 ) );
                        int g = int.Parse( reader.GetAttribute( 2 ) );
                        int b = int.Parse( reader.GetAttribute( 3 ) );

                        material.Ambient = Color.FromArgb( a, r, g, b );
                    }
                    else if ( reader.LocalName == "Diffuse" )
                    {
                        int a = int.Parse( reader.GetAttribute( 0 ) );
                        int r = int.Parse( reader.GetAttribute( 1 ) );
                        int g = int.Parse( reader.GetAttribute( 2 ) );
                        int b = int.Parse( reader.GetAttribute( 3 ) );

                        material.Diffuse = Color.FromArgb( a, r, g, b );
                    }
                    else if ( reader.LocalName == "Specular" )
                    {
                        int a = int.Parse( reader.GetAttribute( 0 ) );
                        int r = int.Parse( reader.GetAttribute( 1 ) );
                        int g = int.Parse( reader.GetAttribute( 2 ) );
                        int b = int.Parse( reader.GetAttribute( 3 ) );

                        material.Specular = Color.FromArgb( a, r, g, b );
                    }
                    else if ( reader.LocalName == "Shininess" )
                    {
                        float shininess = float.Parse( reader.ReadString() );
                        material.Shininess = shininess;
                    }
                    else if ( reader.LocalName == "Texture" )
                    {
                        int index = int.Parse( reader.GetAttribute( 0 ) );
                        string filename = reader.GetAttribute( 1 );
                        material.Textures[ index ] = GlobalResourceCache.CreateTextureFromFile( renderer,
                            filename );
                    }
                    else if ( reader.LocalName == "VisualEffect" )
                    {
                        material.VisualEffectName = reader.ReadString();
                    }
                }
            }

            return material;
        }
Пример #7
0
 /// <summary>
 /// This is called right before rendering a specific geometry chunk. Includes a parameter
 /// for passing extra data needed for rendering this specific chunk.
 /// </summary>
 public virtual void BeginRenderObject( Material material, List<object> extraData )
 {
 }
Пример #8
0
 /// <summary>
 /// This is called right before rendering a specific geometry chunk.
 /// </summary>
 public virtual void BeginRenderObject( Material material )
 {
 }
Пример #9
0
 /// <summary>
 /// Adds a material to the internal list of materials.
 /// </summary>
 /// <param name="material"></param>
 public void AddMaterial( Material material, string name )
 {
     materials.Add( name, material );
 }