Cesium的Tileset躺在Potree的pointcloud后面

时间:2019-06-25 11:10:00

标签: three.js cesium

我在同一画布上渲染铯和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)
     })
  }

0 个答案:

没有答案