public override void BeginRenderObject(Material material) { effect.SetValue("world", renderer.WorldMatrix); effect.SetValue("worldViewProj", renderer.WorldViewProjectionMatrix); effect.CommitChanges(); }
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(); }
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(); }
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(); }
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 ); }
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; }
/// <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 ) { }
/// <summary> /// This is called right before rendering a specific geometry chunk. /// </summary> public virtual void BeginRenderObject( Material material ) { }
/// <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 ); }