MOgre in Win Form Not Display Object ( Solved )


07-06-2010 01:25:26

Hi there i am currently making a map Editor using MOgre for my rendering and translation window, Problem is that it is not displaying objects.

I have a Windows Form timer set to call a DoRender Function every 16 milliseconds witch translates to roughly 60 fps if not just abit more.
The RenderOnFrame Function returns a value of true so it appears to be rendering. I have tested the mesh as its from the game Engine and its a simple
Textured Cube Exported From Blender with a Texture and it displays fine and with the texture in the Game Engine.

No Errors are thrown from Ogre and it all seems to be setup fine the form code i will post below is an MDI child for the editor app however i am currently testing it bolth as the mdi child and by itself.

public partial class MOgreForm : Form
#region Private Vars

Root mRoot = null;
RenderWindow mRenderWindow = null;
Camera mCam = null;
SceneManager mSceneManager = null;

protected MOIS.InputManager inputManager;
protected MOIS.Keyboard inputKeyboard;

//Render Timer
System.Windows.Forms.Timer mRenderTimer = null;


#region Public Vars


#region Public Methods

public MOgreForm()

public void StartUp(string ProjectFolder)
// Create root object
this.mRoot = new Root();

// Define Resources
ConfigFile cf = new ConfigFile();
cf.Load(ProjectFolder += "resources.cfg", "\t:=", true);
ConfigFile.SectionIterator seci = cf.GetSectionIterator();
String secName, typeName, archName;

while (seci.MoveNext())
secName = seci.CurrentKey;
ConfigFile.SettingsMultiMap settings = seci.Current;
foreach (KeyValuePair<string, string> pair in settings)
typeName = pair.Key;
archName = pair.Value;
ResourceGroupManager.Singleton.AddResourceLocation(archName, typeName, secName);

// Setup RenderSystem
RenderSystem rs = this.mRoot.GetRenderSystemByName("Direct3D9 Rendering Subsystem");
// or use "OpenGL Rendering Subsystem"
this.mRoot.RenderSystem = rs;
rs.SetConfigOption("Full Screen", "No");
rs.SetConfigOption("Video Mode", "800 x 600 @ 32-bit colour");

// Create Render Window
this.mRoot.Initialise(false, "Main Ogre Window");
NameValuePairList misc = new NameValuePairList();
misc["externalWindowHandle"] = Handle.ToString();
this.mRenderWindow = this.mRoot.CreateRenderWindow("Main RenderWindow", 800, 600, false, misc);

// Init resources
TextureManager.Singleton.DefaultNumMipmaps = 5;

// Create a Simple Scene
this.mSceneManager = mRoot.CreateSceneManager(SceneType.ST_GENERIC);
this.mCam = this.mSceneManager.CreateCamera("Camera");
this.mCam.AutoAspectRatio = true;

this.mCam.Position = new Mogre.Vector3(0, 0, -40);

this.mRenderTimer = new System.Windows.Forms.Timer();
this.mRenderTimer.Interval = 16;
this.mRenderTimer.Enabled = true;
this.mRenderTimer.Tick += new EventHandler(mRenderTimer_Tick);

//Setup our few events handles
this.Disposed += new EventHandler(MOgreForm_Disposed);
this.Move += new EventHandler(MOgreForm_Move);

//Add an object to test the render

Entity ent = this.mSceneManager.CreateEntity("ninja", "Cube.mesh");
this.mSceneManager.RootSceneNode.CreateChildSceneNode("Test", new Mogre.Vector3(0, 0, 0)).AttachObject(ent);


MOIS.ParamList pl = new MOIS.ParamList();
IntPtr windowHnd;
pl.Insert("WINDOW", this.Handle.ToString());

inputManager = MOIS.InputManager.CreateInputSystem(pl);

// Create all devices (except joystick, as most people have Keyboard/Mouse) using unbuffered input.
inputKeyboard = (MOIS.Keyboard)inputManager.CreateInputObject(MOIS.Type.OISKeyboard, false);
catch (System.Runtime.InteropServices.SEHException)
if (OgreException.IsThrown)
"An Ogre exception has occurred!");



#region Private Methods

private void MOgreForm_Move(object sender, EventArgs e)

private void MOgreForm_Disposed(object sender, EventArgs e)
if (this.mRoot != null)
this.mRoot = null;

if (this.mRenderWindow != null)
this.mRenderWindow = null;

if (this.mRenderTimer != null)
this.mRenderTimer = null;

if (this.mCam != null)
this.mCam = null;

private void mRenderTimer_Tick(object sender, EventArgs e)

private void DoRender()

if (this.mRoot != null)
// Capture all key presses since last check.

if (inputKeyboard.IsKeyDown(KeyCode.KC_UP))
this.mCam.MoveRelative(new Mogre.Vector3(0, 0, -0.1f));

if (inputKeyboard.IsKeyDown(KeyCode.KC_DOWN))
this.mCam.MoveRelative(new Mogre.Vector3(0, 0, 0.1f));

if (inputKeyboard.IsKeyDown(KeyCode.KC_RIGHT))
this.mCam.MoveRelative(new Mogre.Vector3(0.1f, 0, 0));

if (inputKeyboard.IsKeyDown(KeyCode.KC_LEFT))
this.mCam.MoveRelative(new Mogre.Vector3(-0.1f, 0, 0));

bool Temp = this.mRoot.RenderOneFrame();


Yep no entirly sure what is going on but ill take even a guess at this point. Thanks for any help.

Regards XainFaith.


SOLVED refer to below

Well thats embarssing... it turns out i forgot to set the near plane clipping... I had prevously wrote the code but my compiler crashed and i lost all the files. Turns out i was under the impression that the line of code was in there when it was not.

Sorry for the bother. Thanks Everyone