This is the C# source for MOGRE Intermediate Tutorial 7.
namespace Mogre.Demo.RenderToTexure { class Program { static void Main(string[] args) { try { new RTTTutorial().Go(); } catch { if (OgreException.IsThrown) ExampleApplication.Example.ShowOgreException(); else throw; } } } class RTTTutorial : ExampleApplication.Example { Plane mPlane; Entity mPlaneEnt; SceneNode mPlaneNode; public override void CreateScene() { sceneMgr.AmbientLight = new ColourValue(0.2f, 0.2f, 0.2f); Light light = sceneMgr.CreateLight("MainLight"); light.Position = new Vector3(20, 80, 50); camera.Position = new Vector3(60, 200, 70); camera.LookAt(0, 0, 0); //First of all, we need to create a texture. MaterialPtr mat = MaterialManager.Singleton.Create("PlaneMat", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME); TextureUnitState tuisTexture = mat.GetTechnique(0).GetPass(0).CreateTextureUnitState("grass_1024.jpg"); mPlane = new Plane(); mPlane.d = 0; mPlane.normal = Vector3.UNIT_Y; MeshManager.Singleton.CreatePlane("PlaneMesh", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, mPlane, 120, 120, 1, 1, true, 1, 1, 1, Vector3.UNIT_Z); mPlaneEnt = sceneMgr.CreateEntity("PlaneEntity", "PlaneMesh"); mPlaneEnt.SetMaterialName("PlaneMat"); mPlaneNode = sceneMgr.RootSceneNode.CreateChildSceneNode(); mPlaneNode.AttachObject(mPlaneEnt); //------------- TexturePtr rtt_texture = TextureManager.Singleton.CreateManual("RttTex", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, TextureType.TEX_TYPE_2D, window.Width, window.Height, 0, PixelFormat.PF_R8G8B8, (int)TextureUsage.TU_RENDERTARGET); RenderTexture renderTexture = rtt_texture.GetBuffer().GetRenderTarget(); renderTexture.AddViewport(camera); renderTexture.GetViewport(0).SetClearEveryFrame(true); renderTexture.GetViewport(0).BackgroundColour = ColourValue.Black; renderTexture.GetViewport(0).OverlaysEnabled = false; // Either this way renderTexture.IsAutoUpdated = true; //or this way //renderTexture.Update(); // Now save the contents //renderTexture.WriteContentsToFile("start.png"); //------------- mMiniScreen = new Rectangle2D(true); mMiniScreen.SetCorners(0f, 0f, 1.0f, -1.0f); mMiniScreen.BoundingBox = new AxisAlignedBox(-100000.0f * Vector3.UNIT_SCALE, 100000.0f * Vector3.UNIT_SCALE); SceneNode miniScreenNode = sceneMgr.RootSceneNode.CreateChildSceneNode("MiniScreenNode"); miniScreenNode.AttachObject(mMiniScreen); //-------------- //MaterialPtr renderMaterial = MaterialManager.Singleton.Create("RttMat", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME); //renderMaterial.CreateTechnique().CreatePass(); //Pass pass = renderMaterial.GetTechnique(0).GetPass(0); //pass.LightingEnabled = false; //pass.CreateTextureUnitState("RttTex"); //mMiniScreen.SetMaterial("RttMat"); //-------------- MaterialPtr renderMaterial = MaterialManager.Singleton.GetByName("Sepia"); renderMaterial.GetTechnique(0).GetPass(0).GetTextureUnitState(0).SetTextureName("RttTex"); mMiniScreen.SetMaterial("Sepia"); renderTexture.PreRenderTargetUpdate += renderTexture_PreRenderTargetUpdate; renderTexture.PostRenderTargetUpdate += renderTexture_PostRenderTargetUpdate; root.FrameRenderingQueued += frameRenderingQueued; } private Rectangle2D mMiniScreen; void renderTexture_PreRenderTargetUpdate(RenderTargetEvent_NativePtr evt) { mMiniScreen.Visible = false; } void renderTexture_PostRenderTargetUpdate(RenderTargetEvent_NativePtr evt) { mMiniScreen.Visible = true; } bool frameRenderingQueued(FrameEvent evt) { mPlaneNode.Yaw(new Radian(evt.timeSinceLastFrame)); return true; } } }