我的github
posts - 3243,  comments - 42,  views - 158万

这个问题可能是由于Three.js和Cesium在渲染顺序或者渲染上下文方面存在冲突导致的。Three.js和Cesium都是用于创建3D或2D地图的库,它们各自管理自己的渲染画布(WebGL上下文)。

解决方法:

  1.  确保Cesium初始化先于Three.js。Cesium需要完全初始化并且渲染其画布之后,Three.js才能在同一个DOM元素上进行渲染。 

  2.  使用Cesium的WebGL的 overlays功能,将Three.js的画布叠加在Cesium的画布上。这样做可以让Cesium管理其自身的渲染,而Three.js则在一个WebGL的overlay上绘制。 

示例代码:

复制代码
// 初始化Cesium
var cesiumWidget = new Cesium.CesiumWidget('cesiumContainer');
var scene = cesiumWidget.scene;
 
// 初始化Three.js,并将其画布作为overlay叠加在Cesium上
var threeCanvas = document.createElement('canvas');
var threeRenderer = new THREE.WebGLRenderer({ canvas: threeCanvas });
threeRenderer.autoClear = false; // 关闭自动清除背景
 
// 在Cesium中添加Three.js的画布作为overlay
var viewer = cesiumWidget.viewer;
viewer.scene.postRender.addEventListener(function () {
    if (threeCanvas.width !== viewer.canvas.width) {
        threeCanvas.width = viewer.canvas.width;
        threeCanvas.height = viewer.canvas.height;
    }
    threeRenderer.clear();
    threeRenderer.render(threeScene, threeCamera);
});
复制代码

确保在Cesium的渲染循环中调用Three.js的渲染函数,这样可以在Cesium的WebGL上下文创建好之后,再进行Three.js的渲染。

注意:在实际使用时,还需要初始化Three.js的场景(threeScene)和相机(threeCamera),并且设置合适的尺寸和位置。

posted on   XiaoNiuFeiTian  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2023-07-12 Cannot construct DataBuffer
2021-07-12 Typescript:参数“item”隐式具有“any”类型
2021-07-12 ArcGIS打断线&合并线
2021-07-12 模块"react-leaflet"没有导出的成员“Map”
2021-07-12 --save-dev types & TS2749:'XXX'表示一个值,但在这里用作类型。你的意思是“XXX的类型”吗?
2021-07-12 @esri/arcgis-rest-request
2021-07-12 Modeling Our World书:The ESRI Guide to geodatabase Design
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示