15 Babylonjs基础入门 高度图

这一节,我们的目标是了解高度图,并学习如何生成真实的地面。
在这里插入图片描述
最后效果。

如何实现?

实现没有高度的一个平面效果很简单,直接可以用Babylon.js的方法生成:

var groundMaterial = new BABYLON.StandardMaterial("ground", scene);
groundMaterial.diffuseTexture = new BABYLON.Texture("Earth__land.jpg", scene);

var groundPlane = BABYLON.Mesh.CreatePlane("groundPlane", 200.0, scene);
groundPlane.material = groundMaterial;

在这里插入图片描述
设置一个材质添加上纹理,并贴到一个平面上面。

高度图的说明

了解高度图是本节的主要目标。高度图只是一个灰度图像,就像我们要使用的图像一样:
在这里插入图片描述
此图像将用于生成高度,高度图的内容是由黑到灰的不同颜色组成。里面代表着地面的高程数据。每个像素的颜色将被解析为到‘地面’距离或者‘高度’。所以,像素的颜色越白,海拔就越高。
为了生成那些高度图,你可以使用“Terragen”或“Picogen”等软件。

创建高度地形

我们可以通过Babylon.js的CreateGroundFromHeightMap方法,加上高度图创建具有高度的地形:

var ground = BABYLON.Mesh.CreateGroundFromHeightMap("ground", "worldHeightMap.jpg", 200, 200, 250, 0, 10, scene, false, successCallback);

这个方法的参数依次是:

  • 名称
  • 高度图纹理地址
  • 网格的宽度
  • 网格的深度
  • 网格的分段数:数值越大,网格显得越精密
    在这里插入图片描述
  • 最小高度
  • 最大高度
  • 场景对象
  • 是否动态更新此网格(true为是,false为不会更新)
  • 成功后的回调,将在创建高度贴图并创建完网格的顶点后触发。回调函数的第一个参数为网格对象。

最后,具有高度的网格创建完成后,我们只需要再添加上材质:

ground.material = groundMaterial;

现在,我们就实现了地球的3D视图。
在这里插入图片描述
我们还添加了上一节讲到的天空盒,还有点光源来模拟太阳运动。
这是另一个使用Babylon.js实现的高度图内容案例:
在这里插入图片描述

  • 提示
    当用户操作相机时,如果他能看到底下,或者缩小到天空盒外面,可能会很尴尬。为了避免这种情况,我们约束的相机运动:
var camera = new BABYLON.ArcRotateCamera("Camera", 0, 0.8, 100, BABYLON.Vector3.Zero(), scene);
    camera.lowerBetaLimit = 0.1; //限制相机平衡的最低角度
    camera.upperBetaLimit = (Math.PI / 2) * 0.9; //限制相机平行的最高角度
    camera.lowerRadiusLimit = 30; //限制相机距离焦点最近距离
    camera.upperRadiusLimit = 150; //限制相机距离焦点最远距离
    camera.attachControl(canvas, true);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值