菜鳥學習OGRE和天龍八部之十二: WCollision 地面碰撞搞定

來源:互聯網
上載者:User

 

天龍八部裡面人物和地面物體的表面的碰撞時用WCollision來做的

 

比如橋之類,不屬於地表,屬於物體,沒法用地形的高度檢測,但是人要過去,就做了一層透明的碰撞表面蓋在上面

 

我用黑色材質標識了出來,:

 

至於wcollision二進位檔案的資料格式也很簡單:

 

前8個位元組不重要,應該是版本號碼和三角形總數吧,貌似總數不太對

接下來的資料就是WCollision的資料區塊

資料區塊的前8個位元組是地圖行列座標,貌似沒什麼用,接下來的4個位元組很重要,是這個資料區塊的三角形數量

他決定這個資料區塊的size

 

按資料區塊讀取就好

 

 

直接給出我的源碼:

void TLBBTerrain::openWCollisionFile(const String &fileName , const String &groupName)<br />{<br />DataStreamPtr stream = ResourceGroupManager::getSingleton().openResource(fileName , groupName);<br />if(stream.isNull())<br />{<br />OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, "開啟WCollision檔案失敗:"+fileName, "Terrain::openWCollisionFile");<br />return ;<br />}<br />WCollisionHeader header;<br />// 讀取檔案頭, 8個位元組的結構<br />stream->read(&header , sizeof(header));</p><p>Vector3 vec3 = Vector3::ZERO;<br />int number = 0;<br />while(!stream->eof()){<br />stream->skip(8);// 跳過資料區塊行列座標,暫時沒發現什麼用<br />stream->read(&number, sizeof(number)); // 資料區塊的三角形數量</p><p>// 讀取此資料區塊的三角形頂點資料<br />for (int i = 0; i < number * 3; ++ i)<br />{<br />stream->read(&vec3, sizeof(vec3));<br />mWCollisionData.push_back(vec3);<br />}<br />}<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.