在前面我們曾經實作過簡單的地形(Directx11學習筆記【十三】 實作一個簡單地形),只不過原來使用一個固定的函式獲得地形高度,這樣跟真實的地形差距比較大。接下來讓我們學習使用高度圖來進行三維地形模擬。
1.高度圖
高度圖其實就是一組連續的陣列,這個陣列中的元素與地形網格中的頂點一一對應,且每一個元素都指定了地形網格的某個頂點的高度值。高度圖最常用的使用灰度圖實作,灰度圖中亮度越大對應的地形高度越高。下面就是一幅灰度圖:
灰度圖格式通常為.raw,google一下高度圖保存圖片改為raw格式就可以了。高度圖每個元素通常只分配一個位元組,即數值在0~255之間。但在實際使用的時候經常要對高度進行比例變換,因此需要將byte轉為float,然后通過一個縮放系數進行縮放,這樣就不必拘泥于0~255這么一個范圍了。
2.讀取高度圖
讀取高度圖很簡單,用二進制讀取檔案就好了。
復制代碼
1 //讀取高度圖資訊
2 bool TerrainDemo::ReadRawFile(std::string filePath)
3 {
4 std::ifstream inFile;
5 //二進制方式打開檔案
6 inFile.open(filePath.c_str(), std::ios::binary);
7 //檔案指標移動到末尾
8 inFile.seekg(0, std::ios::end);
9 //大小為當前緩沖區大小
10 std::vector<BYTE> inData(inFile.tellg());
11 //檔案指標移動到開頭
12 inFile.seekg(std::ios::beg);
13 //讀取高度資訊
14 inFile.read((char*)&inData[0], inData.size());
15 inFile.close();
16
17 m_heightInfos.resize(inData.size());
18 for (int i = 0; i < inData.size(); ++i)
19 {
20 m_heightInfos[i] = inData
uj5u.com熱心網友回復:
有什么問題???轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/50519.html
標籤:其它游戲引擎
上一篇:Unity專案匯入Eclipse中提示your hardware does not support this application,這個該怎么辦,請大神指教
