场景管理——地形生成、管理

高度图

  • 高度图——通过高度图的像素生成三维地形,高度图(灰度图下图二)的四个分量(x,y,z,w)都在0~255的范围内,将每个分量映射到0~1之间然后取某个分量乘以想要生成地形的最大高度。
  • 早期用法(导入raw的灰度图)
    1. 加载高度图 LoadImage()函数
    2. GetPixel()函数可以获取图片中的像素点,提取出来的像素点需要使用数组保存(高度图只需要保存一个分量),保存的数组可以是float的也可以是BYTE.
    3. 创建一个网格mesh,将网格点对应的高度设置为(像素值映射到0~1之间再乘以最大高度),映射的方法为:加入像素值的大小在0~255之间,就可以将像素值除以255,得到的值就在0~1之间了。
    4. 数组内的像素值可通过偏移来计算i%255就可以推算出列号,i/255为行号,见下图一
  • C++输入输出导入
    •  

C++导入raw高度图代码

洛必达此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“高度图”,获取验证码。在微信里搜索“洛必达”或者“LBDAZY”或者微信扫描右侧二维码都可以关注本站微信公众号。

场景管理技术

  • 室外管理技术可用四叉树分割LOD和ROAM,3D场景可以用八叉树LOD
    LOD不会裁剪网格,只是将看不见或者较远的网格降低网格的分辨率(减少网格点的数量)
    • 四叉树将2D平面分为四份,以树的形式保存,四份里的每一份都可以继续细分下去
    • 下图一为LOD(Levels of Detail)以四边形细分
    • 下图一为ROAM以三角形细分


  • 室内场景管理技术BSP,裁剪看不见的网格部分或者降低细节
    • 平截台体(下图一),为了判断一个点是否包含在平截头体内部,需要将点的坐标代入平截头体6个平面的平面方程式中,如果所有的平面方程式的结果值都是正数的话,就表示这个点在平截头体内部。
    • 边界球体的剔除(下图二和三),使用包围物体的球体代替物体本身与平截台体进行检验。通过圆心到平截台体各个面的距离与圆半径做比较,判断球体与平截台体的关系。

 

未经允许不得转载:他日重逢 » 场景管理——地形生成、管理

赞 (3) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

隐藏
变装