我在同一画布上渲染铯和potree,但是当我从铯添加tileet时,它总是位于pointcloud后面。
告诉我如何解决此问题。
我同时初始化铯和potree
cviewer = new Cesium.Viewer('cesiumContainer', {
useDefaultRenderLoop: false,
animation: false,
baseLayerPicker : false,
fullscreenButton: false,
geocoder: false,
homeButton: false,
infoBox: false,
sceneModePicker: false,
selectionIndicator: false,
timeline: false,
navigationHelpButton: false,
imageryProvider : Cesium.createOpenStreetMapImageryProvider({url : 'http://a.tile.openstreetmap.org/'}),
terrainShadows: Cesium.ShadowMode.DISABLED,
});
cviewer.snippet = new ThreeDTile();
viewer = new Potree.Viewer(document.getElementById("potree_render_area"),"");
viewer.setEDLEnabled(false);
viewer.setMaterial("RGB");
viewer.setFOV(60);
if(isMobile()==true)
viewer.setPointSize(2);
viewer.setPointSizing("Fixed");
viewer.setPointBudget(1*1000*1000); //medLow
else
viewer.setPointSize(1);
viewer.setPointSizing("Adaptive");
viewer.setPointBudget(2*1000*1000);
viewer.setQuality("Squares");
viewer.setEDLEnabled(false);
viewer.setShowSkybox(false);
viewer.setMaterialID(Potree.PointColorType.RGB);
viewer.setDescription('');
viewer.loadSettingsFromURL();
viewer.loadGUI();
let cp = new Cesium.Cartesian3(4303414.154026048, 552161.235598733, 4660771.704035539);
cviewer.camera.setView({
destination : cp,
orientation: {
heading : 10,
pitch : -Cesium.Math.PI_OVER_TWO * 0.5,
roll : 0.0
});
在Potree渲染函数中调用Cesium渲染函数
render(){
cviewer.render();
…..
}
我修改了initThree()函数,删除在potree渲染区域中添加potree画布的行
// this.renderArea.appendChild(this.renderer.domElement);
并在Three.WebGl渲染器中添加铯画布
this.renderer = new THREE.WebGLRenderer({alpha : true,preserveDrawingBuffer: true , canvas : cviewer.canvas});
并在https://github.com/AnalyticalGraphicsInc/cesium/issues/648
上添加了以下几行 var resetFunc = this.renderer.state.reset;
this.renderer.state.reset = function(){};
this.renderer.resetGLState();
this.renderer.state.reset = resetFunc;
我删除了Cesium的所有事件(除了旋转),因为我只希望potree的事件。并停止从双方勾结某些相同的事件。
cviewer.scene.screenSpaceCameraController.enableTranslate = false;
cviewer.scene.screenSpaceCameraController.enableZoom = false;
cviewer.scene.screenSpaceCameraController.enableTilt = false;
cviewer.scene.screenSpaceCameraController.enableLook = false;
从调试器中识别Cesium的pointdown事件处理程序,并将其删除。因为它停止了potree中的轨道控制。
function p(e, t, i, r) {
// function n(t) {
// r(e, t)
// }
i.addEventListener(t, n, !1),
e._removalFunctions.push(function() {
i.removeEventListener(t, n, !1)
})
}