Unity3D中的无限大地形的生成和调

北京哪个医院治疗白癜风最有效 https://wapyyk.39.net/bj/zhuanke/89ac7.html

跟着硬件功用的一直抬高,嬉戏的地形变得越来越大也加倍细节化了(增多了更有特性的地形,大片的草地,还增加了树木,水等物体。在昔时几年功夫里,地形曾经慢慢增多到长达数百平方英里,格外是在RPG嬉戏中。

在本教程中,我将向您展现怎样生成需求超等长的功夫才气欣赏完的3D地形。咱们将哄骗unity3D引擎和C#言语编写代码。需求一些根本的编程学问——即使完备的源代码可免得费下载(见下文),但在本文中,我只会评释最严重的部份并解说示例的代码。

教程最先

最时髦的观望3D地形的方法即是运用某种表面的高度图。高度图是由一组海拔数据形成的图象,图象的尺寸与地形的宽度和高度相般配。颜色越暗,大地越高。上面您将看到云云的数据是怎样更动成看来的网格物体的:

由于咱们想要的地形是无穷大的(或许说是格外宽广的),咱们不能直接哄骗高度图——由于储备所珍稀据所需的内存空间太庞大了,而且高度图的分辩率会增加到数千个像素。

咱们也许将它分红一个个的被称为“块”的片断,而不是完备的做一个格外大的地形。每个块都将有自身的网格,而且几个相邻的块将无缝地合并到一个更大的地形中。您也许将它们视为具备2D(X/Z)坐方向方形图块。关键是要在玩家界限缔造多个地形块(在视野范畴内),并跟着玩家地方的挪移并一直调度地形块的散布。离相机太远的旧块将被节略以释放内存。见下图:

单块若干形态的描画办法:

*长度-这是Unity单元中的块边框的巨细

*高度-这是块中地形的最大可用高度(也称为Unity间隔单元)

*高度图和晶莹图的分辩率——它们也许示意出块的网格和纹理有何等的的确——分辩率越高,咱们就可以得到越繁杂的网格。凭借Unity文档,它的尺寸需求满意N的2次方+1(譬喻,)。

将它放在代码中——这个是地形块配置类:

[代码]:1publicclassTerrainChunkSettings2{3publicintHeightmapResolution{get;privateset;}4publicintAlphamapResolution{get;privateset;}56publicintLength{get;privateset;}7publicintHeight{get;privateset;}8}

这个是地形块类(目前咱们将跳过这个办法):

[代码]:01publicclassTerrainChunk02{03publicintX{get;privateset;}publicintZ{get;privateset;}privateTerrainTerrain{get;set;}privateTerrainChunkSettingsSettings{get;set;}privateNoiseProviderNoiseProvider{get;set;}12}

每个块由其X/Z地方(见上图),配置和Unity地形目标(经过网格呈现的理论嬉戏物体以及衬着场景所需的统统东西)等成分来举行界说。着末一个字段-——NoiseProvider——将鄙人面商议。

[代码]:01publicclassTerrainChunk02{03publicintX{get;privateset;}publicintZ{get;privateset;}privateTerrainTerrain{get;set;}privateTerrainChunkSettingsSettings{get;set;}privateNoiseProviderNoiseProvider{get;set;}12}

那末怎样缔造一个占有不少升沉和纹理的山谷或山丘的高度图呢?

有不少办法也许抵达这一目标——您也许在程序生成维基上找到洪量的对于它的消息。咱们将经过哄骗LibNoise库,来用干系的噪声值填充咱们的高度图。对于噪声值的细节以及哄骗办法也许参考下列两个网站(

转载请注明地址:http://www.1xbbk.net/jwbjj/1224.html


  • 上一篇文章:
  • 下一篇文章: 没有了
  • 网站简介 广告合作 发布优势 服务条款 隐私保护 网站地图 版权声明
    冀ICP备19027023号-7