菜鸟学习OGRE和天龙八部之十二: WCollision 地面碰撞搞定

天龙八部里面人物和地面物体的表面的碰撞时用WCollision来做的

 

比如桥之类,不属于地表,属于物体,没法用地形的高度检测,但是人要过去,就做了一层透明的碰撞表面盖在上面

 

我用黑色材质标识了出来,如图:


至于wcollision二进制文件的数据格式也很简单:

 

前8个字节不重要,应该是版本号和三角形总数吧,貌似总数不太对

接下来的数据就是WCollision的数据块

数据块的前8个字节是地图行列坐标,貌似没什么用,接下来的4个字节很重要,是这个数据块的三角形数量

他决定这个数据块的size

 

按数据块读取就好

 

 

直接给出我的源码:

  1. void TLBBTerrain::openWCollisionFile(const String &fileName , const String &groupName)  
  2. {  
  3.     DataStreamPtr stream = ResourceGroupManager::getSingleton().openResource(fileName , groupName);  
  4.     if(stream.isNull())   
  5.     {   
  6.         OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, "打开WCollision文件失败:"+fileName, "Terrain::openWCollisionFile");  
  7.         return ;   
  8.     }  
  9.     WCollisionHeader header;  
  10.     // 读取文件头, 8个字节的结构  
  11.     stream->read(&header , sizeof(header));  
  12.   
  13.     Vector3 vec3 = Vector3::ZERO;  
  14.     int number = 0;  
  15.     while(!stream->eof()){  
  16.         stream->skip(8);         // 跳过数据块行列坐标,暂时没发现什么用  
  17.         stream->read(&number, sizeof(number));  // 数据块的三角形数量  
  18.   
  19.         // 读取此数据块的三角形顶点数据  
  20.         for (int i = 0; i < number * 3; ++ i)  
  21.         {  
  22.             stream->read(&vec3, sizeof(vec3));   
  23.             mWCollisionData.push_back(vec3);  
  24.         }  
  25.     }  
  26. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值