Ogre的地形编辑Demo(一)
2013-01-02 15:29
351 查看
一直想用Ogre 1.8来实现一个拥有较高自由度的地形编辑Demo,在Ogre的地形sample中,只有一块Terrain,明显是满足不了地表纹理丰富的大型地形块的。于是,我的解决办法是,将加入的地形高度图分几个区域,每个区域以一个Terrain的形式加入,这样就生成了一个由多个Terrain组成的大地形,每个Terrain的纹理可以保持不同样式。
需要注意的是关于Ogre::Image的运用,用Image类动态生成图片,申请内存必须用Ogre申请内存的方式,如果用new,最后在释放内存的时候,会造成程序的崩溃。= =当时找这个BUG找的真悲剧。其实还有一个更好的实现方式吧,不用申请内存,直接在原高度图那里拿到需要的高度数据就行了,不过应该会比较麻烦,这里自己偷懒了。
View Code
如果完成了这一步,接下来就是地表纹理的编辑了,待续...
需要注意的是关于Ogre::Image的运用,用Image类动态生成图片,申请内存必须用Ogre申请内存的方式,如果用new,最后在释放内存的时候,会造成程序的崩溃。= =当时找这个BUG找的真悲剧。其实还有一个更好的实现方式吧,不用申请内存,直接在原高度图那里拿到需要的高度数据就行了,不过应该会比较麻烦,这里自己偷懒了。
View Code
bool CImageSplitter::SplitterImage(const size_t x, const size_t y, const size_t width, const size_t height, Ogre::Image &ImageSource, Ogre::Image &ImageOut) { Ogre::PixelBox pb = ImageSource.getPixelBox(); //划分区域 Ogre::Box box; box.left = x; box.top = y; box.right = box.left + width; box.bottom = box.top + height; //创建内存 size_t bit = ImageSource.getBPP(); size_t ByteCount = bit/8; Ogre::uchar *pImageBuffer = OGRE_ALLOC_T(Ogre::uchar, width * height * ByteCount, Ogre::MEMCATEGORY_GENERAL); if(pImageBuffer == NULL) return false; Ogre::PixelBox NewPb = pb.getSubVolume(box); Ogre::uchar *pCurrData = pImageBuffer; Ogre::uchar *pFindData = reinterpret_cast<Ogre::uchar*>(NewPb.data); for(int i = 0; i < height; ++i) { for(int j = 0; j < width; ++j) { size_t n = ByteCount; while(n) { *pCurrData++ = *pFindData++; --n; } } pFindData += NewPb.getRowSkip(); } ImageOut.loadDynamicImage(pImageBuffer, width, height, 1, ImageSource.getFormat(), true); return true; }
如果完成了这一步,接下来就是地表纹理的编辑了,待续...
相关文章推荐
- 仿Crysis的道路编辑, 道路与地形匹配和地形与道路匹配,OGRE + ETM
- 仿Crysis的道路编辑, 道路与地形匹配和地形与道路匹配,OGRE + ETM
- OGRE地形配置文件解析
- Axiom3D:Ogre地形代码解析
- Ogre 地形管理
- Ogre1.8地形和天空盒的建立过程详解(一块地形)
- OGRE关于Demo_CubeMapping 的学习
- ogre1.8自己写的建立地形源码(注释,可直接使用)
- Ogre1.7地形浅析
- 2014年12月4日星期四(DEMO10-2地形生成函数)
- 【笔记】六、OGRE与CEGUI中Demo分析
- OGRE关于Demo_CubeMapping 的学习
- Ogre1.7.2 terrain地形构建例子
- Ogre实现天龙地形
- First Demo of OGRE
- Ogre 天龙八部地形管理器(2) --- 地形和静态对象的加载
- Ogre简单的demo程序 入门必备
- 初级3D地形随机生成算法源码(Ogre实现)放出
- 五线谱编辑Demo(MFC)
- Ogre水波演示Demo(注释)