/// <summary> /// Renders the ocean /// </summary> /// <param name="context">Rendering context</param> public override void Render( IRenderContext context ) { if ( Planet == null || Planet.PlanetModel.OceanModel == null ) { return; } GameProfiles.Game.Rendering.PlanetRendering.OceanRendering.Begin( ); float seaLevel = ( SpherePlanet.PlanetModel.Radius + Planet.PlanetModel.OceanModel.SeaLevel ).ToRenderUnits; seaLevel /= 10.0f; Graphics.Renderer.PushTransform( TransformType.LocalToWorld ); Graphics.Renderer.Scale( TransformType.LocalToWorld, seaLevel, seaLevel, seaLevel ); m_WaveAnimation.UpdateAnimation( context.RenderTime ); m_Technique.Effect.Parameters[ "OceanTexture0" ].Set( m_WaveAnimation.SourceTexture ); m_Technique.Effect.Parameters[ "OceanTexture1" ].Set( m_WaveAnimation.DestinationTexture ); m_Technique.Effect.Parameters[ "OceanTextureT" ].Set( m_WaveAnimation.LocalT ); context.ApplyTechnique( m_Technique, m_OceanGeometry ); Graphics.Renderer.PopTransform( TransformType.LocalToWorld ); GameProfiles.Game.Rendering.PlanetRendering.OceanRendering.End( ); }
/// <summary> /// Renders the atmosphere /// </summary> /// <param name="context">Rendering context</param> public void DeepRender( IRenderContext context ) { if ( Planet == null || Planet.PlanetModel.AtmosphereModel == null ) { return; } SetupAtmosphereEffectParameters( m_Techniques.Effect, false, true ); context.ApplyTechnique( m_Techniques, AtmosphereGeometry ); }
/// <summary> /// Renders the cloud model /// </summary> /// <param name="context">Rendering context</param> public override void Render( IRenderContext context ) { if ( Planet == null || Planet.PlanetModel.CloudModel == null ) { return; } if ( m_CloudSphere == null || HasCloudModelChanged( ) ) { m_CloudSphere = CreateCloudSphere( ); } SetupCloudEffectParameters( m_Technique.Effect ); context.ApplyTechnique( m_Technique, m_CloudSphere ); }
public void Render( IRenderContext context ) { if ( Planet.EnableTerrainRendering ) { ms_TerrainRenderer.Render( context, Planet, m_PlanetTexture ); } else { UniCamera.PushAstroRenderTransform( TransformType.LocalToWorld, Planet.Transform ); m_PlanetTechnique.Effect.Parameters[ "TerrainSampler" ].Set( m_PlanetTexture ); m_PlanetTechnique.Effect.Parameters[ "CloudSampler" ].Set( m_CloudTexture ); m_PlanetTechnique.Effect.Parameters[ "CloudTransform" ].Set( m_CloudOffsetTransform ); context.ApplyTechnique( m_PlanetTechnique, m_PlanetGeometry ); float cloudLayerScale = 1.01f; Graphics.Renderer.Scale( TransformType.LocalToWorld, cloudLayerScale, cloudLayerScale, cloudLayerScale ); m_CloudTechnique.Effect.Parameters[ "CloudSampler" ].Set( m_CloudTexture ); m_CloudTechnique.Effect.Parameters[ "CloudTransform" ].Set( m_CloudOffsetTransform ); context.ApplyTechnique( m_CloudTechnique, m_PlanetGeometry ); Graphics.Renderer.PopTransform( TransformType.LocalToWorld ); } m_CloudAngle = Utils.Wrap( m_CloudAngle + Constants.DegreesToRadians * 0.01f, 0, Constants.TwoPi ); m_CloudOffsetTransform.SetXRotation( m_CloudAngle ); }
/// <summary> /// Renders the terrain /// </summary> /// <param name="context">Terrain rendering context</param> public override void Render( IRenderContext context ) { if ( Planet == null ) { throw new InvalidOperationException( "Can't render terrain patches without first setting planet object" ); } GameProfiles.Game.Rendering.PlanetRendering.TerrainRendering.Begin( ); UpdatePatches( UniCamera.Current ); m_Vertices.VertexBuffer.Begin( ); context.ApplyTechnique( m_Technique, m_PatchRenderer ); m_Vertices.VertexBuffer.End( ); GameProfiles.Game.Rendering.PlanetRendering.TerrainRendering.End( ); //if ( DebugInfo.ShowPatchInfo ) //{ // m_Patches[ 0 ].DebugRender( ); //} if ( DebugInfo.ShowPendingTerrainBuildItemCount ) { DebugText.Write( "Pending terrain build items: " + TerrainPatchBuilder.PendingBuildItems ); } if ( DebugInfo.ShowTerrainLeafNodeCount ) { int leafCount = 0; foreach ( TerrainPatch patch in m_RootPatches ) { leafCount += patch.CountNodesWithVertexData( ); } DebugText.Write( "Terrain leaf nodes: {0}", leafCount ); } }
/// <summary> /// Renders this object /// </summary> /// <param name="context">Rendering context</param> public void Render( IRenderContext context ) { context.ApplyTechnique( m_Technique, m_Geometry ); }
public void Render( IRenderContext context, SpherePlanet planet, ITexture planetTerrainTexture ) { Graphics.Renderer.PushTransform( TransformType.LocalToWorld ); { IUniCamera curCam = UniCamera.Current; UniTransform transform = planet.Transform; double scale = 1.0 / 100000.0; float x = ( float )( UniUnits.Metres.FromUniUnits( transform.Position.X - curCam.Position.X ) * scale ); float y = ( float )( UniUnits.Metres.FromUniUnits( transform.Position.Y - curCam.Position.Y ) * scale ); float z = ( float )( UniUnits.Metres.FromUniUnits( transform.Position.Z - curCam.Position.Z ) * scale ); Graphics.Renderer.SetTransform( TransformType.LocalToWorld, new Point3( x, y, z ), transform.XAxis, transform.YAxis, transform.ZAxis ); float radius = ( float )( ( UniUnits.Metres.FromUniUnits( planet.Radius ) * scale ) / TerrainPatch.PlanetRadius ); Graphics.Renderer.Scale( TransformType.LocalToWorld, radius, radius, radius ); } m_PlanetTerrainTechnique.Effect.Parameters[ "TerrainSampler" ].Set( planetTerrainTexture ); m_Builder.BeginPatchRendering( ); context.ApplyTechnique( m_PlanetTerrainTechnique, RenderPatches ); m_Builder.EndPatchRendering( ); // Graphics.Renderer.PushRenderState( m_PatchRenderState ); // Graphics.Renderer.PopRenderState( ); Graphics.Renderer.PopTransform( TransformType.LocalToWorld ); }
/// <summary> /// Renders this mesh /// </summary> public void Render( IRenderContext context ) { context.ApplyTechnique( m_Technique.Technique, RenderMesh ); }
/// <summary> /// Renders the view /// </summary> public void Render( IRenderContext context ) { if ( PreRender != null ) { PreRender( context ); } IRenderer renderer = Graphics.Renderer; Rectangle oldRect = renderer.Viewport; int x = ( int )( m_ViewRect.Left * oldRect.Width ); int y = ( int )( m_ViewRect.Top * oldRect.Height ); int w = ( int )( m_ViewRect.Width * oldRect.Width ); int h = ( int )( m_ViewRect.Height * oldRect.Height ); Graphics.Renderer.SetViewport( x, y, w, h ); renderer.ClearDepth( 1.0f ); // renderer.ClearColourToVerticalGradient( Color.DarkSeaGreen, Color.LightSeaGreen ); renderer.ClearColour( ClearColour ); if ( m_Camera != null ) { m_Camera.Begin( ); } context.ApplyTechnique( m_Technique, m_Renderable ); if ( m_Camera != null ) { m_Camera.End( ); } if ( m_ShowFps ) { m_FpsDisplay.Render( context ); } Graphics.Renderer.SetViewport( oldRect.Left, oldRect.Top, oldRect.Width, oldRect.Height ); }