UNPKG

@sauskylark/potree

Version:

WebGL point cloud viewer

113 lines (80 loc) 3.4 kB
import * as THREE from "../../libs/three.js/build/three.module.js"; export class PotreeRenderer { constructor (viewer) { this.viewer = viewer; this.renderer = viewer.renderer; { let dummyScene = new THREE.Scene(); let geometry = new THREE.SphereGeometry(0.001, 2, 2); let mesh = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial()); mesh.position.set(36453, 35163, 764712); dummyScene.add(mesh); this.dummyMesh = mesh; this.dummyScene = dummyScene; } } clearTargets(){ } clear(){ let {viewer, renderer} = this; // render skybox if(viewer.background === "skybox"){ renderer.setClearColor(0xff0000, 1); }else if(viewer.background === "gradient"){ renderer.setClearColor(0x00ff00, 1); }else if(viewer.background === "black"){ renderer.setClearColor(0x000000, 1); }else if(viewer.background === "white"){ renderer.setClearColor(0xFFFFFF, 1); }else{ renderer.setClearColor(0x000000, 0); } renderer.clear(); } render(params){ let {viewer, renderer} = this; const camera = params.camera ? params.camera : viewer.scene.getActiveCamera(); viewer.dispatchEvent({type: "render.pass.begin",viewer: viewer}); const renderAreaSize = renderer.getSize(new THREE.Vector2()); const width = params.viewport ? params.viewport[2] : renderAreaSize.x; const height = params.viewport ? params.viewport[3] : renderAreaSize.y; // render skybox if(viewer.background === "skybox"){ viewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation); viewer.skybox.camera.fov = viewer.scene.cameraP.fov; viewer.skybox.camera.aspect = viewer.scene.cameraP.aspect; viewer.skybox.parent.rotation.x = 0; viewer.skybox.parent.updateMatrixWorld(); viewer.skybox.camera.updateProjectionMatrix(); renderer.render(viewer.skybox.scene, viewer.skybox.camera); }else if(viewer.background === "gradient"){ renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG); } for(let pointcloud of this.viewer.scene.pointclouds){ const {material} = pointcloud; material.useEDL = false; } viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, null, { clipSpheres: viewer.scene.volumes.filter(v => (v instanceof Potree.SphereVolume)), }); // render scene renderer.render(viewer.scene.scene, camera); viewer.dispatchEvent({type: "render.pass.scene",viewer: viewer}); viewer.clippingTool.update(); renderer.render(viewer.clippingTool.sceneMarker, viewer.scene.cameraScreenSpace); //viewer.scene.cameraScreenSpace); renderer.render(viewer.clippingTool.sceneVolume, camera); renderer.render(viewer.controls.sceneControls, camera); renderer.clearDepth(); viewer.transformationTool.update(); viewer.dispatchEvent({type: "render.pass.perspective_overlay",viewer: viewer}); // renderer.render(viewer.controls.sceneControls, camera); // renderer.render(viewer.clippingTool.sceneVolume, camera); // renderer.render(viewer.transformationTool.scene, camera); // renderer.setViewport(width - viewer.navigationCube.width, // height - viewer.navigationCube.width, // viewer.navigationCube.width, viewer.navigationCube.width); // renderer.render(viewer.navigationCube, viewer.navigationCube.camera); // renderer.setViewport(0, 0, width, height); viewer.dispatchEvent({type: "render.pass.end",viewer: viewer}); } }