用 Three.js 创建一个酷炫且真实的地球

本文详细介绍了如何使用Three.js库逐步构建一个具有凹凸贴图、云层、海洋反射、夜景、大气菲涅尔效果和大气层的3D地球模型。每个步骤都配以代码示例,通过添加各种细节,最终呈现出一个酷炫且真实的3D地球场景,包括星空背景。
摘要由CSDN通过智能技术生成

image.png
接下来我会分步骤讲解,在线示例在数字孪生平台

先添加一个球体

我们用threejs中的SphereGeometry来创建球体,给他贴一张地球纹理。

let earthGeo = new THREE.SphereGeometry(10, 64, 64)
let earthMat = new THREE.MeshStandardMaterial({
   
  map: albedoMap,
})
this.earth = new THREE.Mesh(earthGeo, earthMat)
this.group.add(this.earth)

然后写一个函数让这个球体能够进行自转,并且该函数每帧都会调用。

updateScene(interval, elapsed) {
   
    this.controls.update()
    this.stats1.update()

    this.earth.rotateY(interval * 0.005 * params.speedFactor)
}

在屏幕上我们就会得到如下的效果。
image.png

添加凹凸贴图

地球上有山脉海洋,本质上是凹凸不平的,在太阳下也会呈现不同的阴影效果。那么为了让我们的地球更加真实,我们可以用 NASA 对外提供的地球的凹凸贴图,将其应用到地球的MeshStandardMaterial.

this.dirLight = new THREE.DirectionalLight(0xffffff, params.sunIntensity)
this.dirLight.position.set(-50, 0, 30)
scene.add(this.dirLight)

let earthMat = new THREE.MeshStandardMaterial({
   
      map: albedoMap,
      bumpMap: bumpMap,
      bumpScale: 0.03, 
})

这样我们就能够立即看山脉在阳光照耀下投下的阴影。
image.png
bumpScale这个值要尽量小一点,如果太大的话,会发现即使在地球的阴影面,山脉也会被照亮。

添加云

NASA官方同样提供了云的贴图。我们将云的贴图添加到一个单独的网格球体,并且半径要比地球大。这么做是为了后面模拟云在地球上投射阴影的效果。

const cloudsMap = await loadTexture
在Vue 2中使用Three.js创建地图可以按照以下步骤进行: 1. 首先,确保你已经安装了Vue CLI并创建了一个Vue项目。如果没有安装,请按照Vue CLI的官方文档进行安装和创建项目。 2. 安装Three.js库。可以通过以下命令使用npm进行安装: ```bash npm install three ``` 3. 在Vue组件中引入Three.js库。在你需要使用Three.js的组件中,可以通过以下方式引入: ```javascript import * as THREE from 'three'; ``` 4. 创建一个Canvas元素用于渲染Three.js场景。在你的Vue组件的模板中,添加一个Canvas元素,例如: ```html <template> <div> <canvas ref="canvas"></canvas> </div> </template> ``` 5. 在Vue组件的生命周期钩子函数中创建Three.js场景并渲染。在你的Vue组件中,可以在`mounted`钩子函数中创建Three.js场景,并在其中进行渲染。例如: ```javascript export default { mounted() { // 获取canvas元素 const canvas = this.$refs.canvas; // 创建场景 const scene = new THREE.Scene(); // 创建相机 const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ); camera.position.z = 5; // 创建渲染器 const renderer = new THREE.WebGLRenderer({ canvas }); renderer.setSize(window.innerWidth, window.innerHeight); // 创建地图 const geometry = new THREE.BoxGeometry(1, 1, 1); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube); // 渲染场景 function animate() { requestAnimationFrame(animate); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera); } animate(); }, }; ``` 以上代码创建了一个简单的场景,其中添加了一个绿色的立方体,并通过动画使其旋转起来。 这只是一个简单示例,你可以根据自己的需求在Three.js中创建更复杂的地图。希望对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞GIS图形的sky.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值