ogre+MFC+MDI错误集

来源:互联网 发布:魔兽世界优化 编辑:程序博客网 时间:2024/06/08 08:32

系统结构是MFC+MDI+OGRE;

今天看到http://www.crystax.net,貌似可以在Android中编译C++,以后应该用的到。

1.照着网上的列子,新建一个视图时,没有渲染,不知怎么回事,默认代码是使用RenderSystem_GL_d,后来换了RenderSystem_Direct3D9_d,就渲染拉。

2.测试代码的时候,怎么弄都没有天空盒,后来网上查资料,需要ResourceGroupManager::getSingleton().initialiseAllResourceGroups();加了之后运行到这句就报错(出错),百思不得其解,用系统的media下面的文件,再加resources_d.cfg,首先先确认resources_d.cfg和media的目录有没有搞错,然后在resources_d.cfg文件里[Popular]下面的一个个删掉,一个个的添加,测试着跑,发现FileSystem=../../media/materials/scripts这句话加入出错,再找media\materials\scripts下面Examples.compositor,Examples.program这2个删掉就可以了,也没弄明白怎么回事,天空盒出来拉,先跑着,后面再来明白是怎么回事。还有如果使用setSkyBox(true, "Examples/SpaceSkyBox",5000);天空盒就没有显示,如果换了setSkyBox(true, "Examples/SpaceSkyBox",500)就显示了,不知是不是和createPlane或者createRenderWindow时的大小参数有关系

 

20130610更新

经过以前的测试,直接把系统自带SampleContext.h等文件结合进自己的 MFC MDI 工程中,再把Terrain列子也结合进来,本来想使用   Ogre::FrameListener,
  Ogre::WindowEventListener,  OIS::KeyListener, OIS::MouseListener,想把每个View都继承OIS::KeyListener, OIS::MouseListener,结果DirectInput只能由主HWND使用,view的HWND不能使用,ois的Win32KeyBoard,Win32Mouse不能使用,现在临时的解决办法是参考Win32KeyBoard.cpp和Win32Mouse.cpp中的代码,把坐标转换为OIS::MouseState state;

OIS::MouseState state;state.X.abs = point.x;state.Y.abs = point.y;state.Z.abs +=  state.Z.rel;CPoint delta = point - s_lastPoint;state.X.rel = delta.x;state.Y.rel = delta.y;


point是OnMouseMove时获得的,s_lastPoint是OnLButtonDown获得的。

当使用RenderSystem_Direct3D9_d模式时,调用Terrain时,mTerrainGroup->loadAllTerrains(true);这句话会报错,不知道是电脑硬件配置问题,还是什么问题。

由于想显示地形,没办法,跟进去OgreTerrainMaterialGeneratorA.cpp文件中HighLevelGpuProgramPtr vprog = mShaderGen->generateVertexProgram(this, terrain, tt);报错;再进去ret->load();这句错误,不明白原因,待以后明白。后来ORGE系统的自带的Terrain列子转换成RenderSystem_GL_d,可以正常显示, 看到网上的列子http://blog.csdn.net/znf19850924/article/details/2099275,改写后Terrain可以正常显示。Happy

原创粉丝点击