博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MOGRE学习随记4

Posted on 2010-09-12 11:19  MetalHunter  阅读(438)  评论(1)    收藏  举报

将ogre嵌入form

 

代码
public partial class OgreForm : Form
{
Root mRoot;
RenderWindow mWindow;

public OgreForm()
{
InitializeComponent();

this.Size = new Size(800, 600);
Disposed
+= new EventHandler(OgreForm_Disposed);
Resize
+= new EventHandler(OgreForm_Resize);
}

void OgreForm_Resize(object sender, EventArgs e)
{
mWindow.WindowMovedOrResized();
}

void OgreForm_Disposed(object sender, EventArgs e)
{
mRoot.Dispose();
mRoot
= null;
}

public void Go()
{
Show();
while (mRoot != null && mRoot.RenderOneFrame())
Application.DoEvents();
}

public void Init()
{
// Create root object
mRoot = new Root();

// Define Resources
ConfigFile cf = new ConfigFile();
cf.Load(
"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 = mRoot.GetRenderSystemByName("Direct3D9 Rendering Subsystem");
// or use "OpenGL Rendering Subsystem"
mRoot.RenderSystem = rs;
rs.SetConfigOption(
"Full Screen", "No");
rs.SetConfigOption(
"Video Mode", "800 x 600 @ 32-bit colour");

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

// Init resources
TextureManager.Singleton.DefaultNumMipmaps = 5;
ResourceGroupManager.Singleton.InitialiseAllResourceGroups();

// Create a Simple Scene
SceneManager mgr = mRoot.CreateSceneManager(SceneType.ST_GENERIC);
Camera cam
= mgr.CreateCamera("Camera");
cam.AutoAspectRatio
= true;
mWindow.AddViewport(cam);

Entity ent
= mgr.CreateEntity("ninja", "ninja.mesh");
mgr.RootSceneNode.CreateChildSceneNode().AttachObject(ent);

cam.Position
= new Vector3(0, 200, -400);
cam.LookAt(ent.BoundingBox.Center);
}
}