这是Wilson Muktar的一篇关于将Three.js与铯集成的客座文章。Three.js是一个轻量级的跨浏览器JavaScript库,用于在浏览器中创建和显示动画3D计算机图形。Cesium的行星级渲染和GIS功能与Three.js的广泛且可访问的通用3D API相结合,为新的WebGL体验打开了许多可能性。你可以在这里查看这个演示的实时版本和代码本身。-加里
3D JavaScript库现在已经完全成熟并广为人知,这使得开发人员可以避免在浏览器中使用3D时遇到的麻烦。开发人员可以轻松创建相机、对象、灯光、材质和图形,并选择渲染器,允许使用HTML5的画布、WebGL或SVG绘制场景。
因为Cesium和Three.js都是用于3D可视化的,并且都是用JavaScript从头开始构建的,所以它们具有相似之处,可以将这些惊人的库集成在一起。我集成两个框架的方法比看起来更简单:我将两个框架分成不同的视图层,参考HTML画布元素,并将它们的控制器组合在同一个坐标系中。由于两者都是开源的,我可以分享这个演示,它将涵盖一些基础知识。
Cesium是一个为创建数字地球而开发的3D库,其渲染与真实地球惊人地精确。使用3DTiles,开发人员可以在浏览器中将几乎所有内容重新渲染到数字画布上。
Cesium的基本渲染原理与Three.js没有太大区别。Three.js是一个用于渲染3D对象的强大3D库。通过复制Cesium的球面坐标系并在两个场景中匹配数字地球仪,很容易将两个单独的渲染引擎层集成到一个主场景中。我将简单说明其集成方法,如下所示:
初始化Cesium渲染器,
初始化Three.js渲染器,
初始化两个库的三维对象,以及
循环渲染器。
主要方法
html需要 Three 和 Cesium容器:
<body>
<div id="cesiumContainer"></div>
<div id="ThreeContainer"></div>
</body>
<script> main(); </script>
function main(){
// boundaries in WGS84 to help with syncing the renderers
var minWGS84 = [115.23,39.55];
var maxWGS84 = [116.23,41.55];
var cesiumContainer = document.getElementById("cesiumContainer");
var ThreeContainer = document.getElementById("ThreeContainer");
var _3Dobjects = []; //Could be any Three.js object mesh
var three = {
renderer: null,
camera: null,
scene: null
};
var cesium = {
viewer: null
};
initCesium(); // Initialize Cesium renderer
initThree(); // Initialize Three.js renderer
init3DObject(); // Initialize