话不多说,整体效果是这样的,本文主要讲解的地球实现
核心需求
- 地球半透明,可以看到背面
- 点阵式的全球地图
- 根据数据的经纬度生成对应的柱体
- 数值越大,柱体的颜色和高度就越深越长
引入Threejs和D3
<script src="https://cdn.staticfile.org/three.js/r125/three.min.js"></script>
<script src="https://d3js.org/d3.v6.js"></script>
<script src="https://unpkg.com/three@0.125.0/examples/js/controls/OrbitControls.js"></script>
<script src="https://unpkg.com/three@0.125.0/examples/js/utils/BufferGeometryUtils.js"></script>
基本HTML结构
<div id="box" style="width: 100%; height: 100%">
<canvas id="canvas" style="width: 100%; height: 100%" />
</div>
定义必要的变量
const box = document.getElementById("box");
const canvas = document.getElementById("canvas");
let glRender;
let camera;
let earthMesh;
let scene;
let meshGroup;
let controls;
初始化相关变量
glRender = new THREE.WebGLRenderer({
canvas, alpha: true });
glRender.setSize(canvas.clientWidth, canvas.clientHeight, false);
scene = new THREE.Scene();
const fov = 45;
const aspect = canvas.clientWidth / canvas.clientHeight