系统结构是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.youkuaiyun.com/znf19850924/article/details/2099275,改写后Terrain可以正常显示。Happy