Directx11学习笔记【二十二】 用高度图实现地形

qq_41001717 2018-06-22 09:09:21
在前面我们曾经实现过简单的地形(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
...全文
286 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
WJN92 2018-06-22
  • 打赏
  • 举报
回复
有什么问题???

456

社区成员

发帖
与我相关
我的任务
社区描述
其它游戏引擎
社区管理员
  • 其它游戏引擎社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧