|
@@ -63651,8 +63651,10 @@ void main() {
|
|
var transformPointcloud = (pointcloud )=>{ //初始化位置
|
|
var transformPointcloud = (pointcloud )=>{ //初始化位置
|
|
viewer.sidebar && viewer.sidebar.addAlignmentButton(pointcloud);
|
|
viewer.sidebar && viewer.sidebar.addAlignmentButton(pointcloud);
|
|
|
|
|
|
- let orientation = pointcloud.panos[0].dataRotation.z;
|
|
|
|
- let location = pointcloud.panos[0].dataPosition.clone().negate();
|
|
|
|
|
|
+ let orientation = pointcloud.panos[0].dataRotation.z + Math.PI;
|
|
|
|
+
|
|
|
|
+ let location = pointcloud.panos[0].dataPosition.clone();//.negate()
|
|
|
|
+
|
|
Alignment.rotate(pointcloud, null, orientation );
|
|
Alignment.rotate(pointcloud, null, orientation );
|
|
Alignment.translate(pointcloud, location );
|
|
Alignment.translate(pointcloud, location );
|
|
|
|
|
|
@@ -63692,7 +63694,7 @@ void main() {
|
|
material.minSize = config.minSize;
|
|
material.minSize = config.minSize;
|
|
material.maxSize = config.maxSize;
|
|
material.maxSize = config.maxSize;
|
|
material.pointSizeType = /* 'ADAPTIVE'// */config.pointSizeType; //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
|
|
material.pointSizeType = /* 'ADAPTIVE'// */config.pointSizeType; //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
|
|
- pointcloud.changePointSize( 0.2 /* config.realPointSize */ ); //material.size = config.pointSize;
|
|
|
|
|
|
+ pointcloud.changePointSize( 0.1 /* config.realPointSize */ ); //material.size = config.pointSize;
|
|
pointcloud.changePointOpacity(1);
|
|
pointcloud.changePointOpacity(1);
|
|
material.shape = Potree.PointShape.SQUARE;
|
|
material.shape = Potree.PointShape.SQUARE;
|
|
pointcloud.color = config.pointColor;
|
|
pointcloud.color = config.pointColor;
|
|
@@ -69899,10 +69901,15 @@ void main() {
|
|
} else {
|
|
} else {
|
|
this.temp.pointOpacity = num;
|
|
this.temp.pointOpacity = num;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ if(Potree.settings.editType == 'merge'){ //not AdditiveBlending
|
|
|
|
+ return this.material.opacity = num
|
|
|
|
+ }
|
|
|
|
+
|
|
if (num == 1) {
|
|
if (num == 1) {
|
|
this.material.opacity = 1;
|
|
this.material.opacity = 1;
|
|
- } else {
|
|
|
|
|
|
+ } else {
|
|
|
|
+
|
|
let str = (Potree.settings.sizeFitToLevel?'sizeFit:':'')+ (canMoreThanOne ? 'canMoreThanOne:':'') +this.temp.pointOpacity+':'+this.maxLevel+':'+this.nodeMaxLevel;
|
|
let str = (Potree.settings.sizeFitToLevel?'sizeFit:':'')+ (canMoreThanOne ? 'canMoreThanOne:':'') +this.temp.pointOpacity+':'+this.maxLevel+':'+this.nodeMaxLevel;
|
|
let value = this.temp.opacity[str]; //储存。防止每次渲染(反复切换density)都要算。
|
|
let value = this.temp.opacity[str]; //储存。防止每次渲染(反复切换density)都要算。
|
|
if(value){
|
|
if(value){
|
|
@@ -72375,7 +72382,13 @@ void main() {
|
|
|
|
|
|
if (transparent){
|
|
if (transparent){
|
|
gl.enable(gl.BLEND);
|
|
gl.enable(gl.BLEND);
|
|
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
|
|
|
|
|
|
+
|
|
|
|
+ if(params.notAdditiveBlending){
|
|
|
|
+ gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); //NormalBlending
|
|
|
|
+ }else {
|
|
|
|
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE); //AdditiveBlending 原本
|
|
|
|
+ }
|
|
|
|
+
|
|
gl.depthMask(false);
|
|
gl.depthMask(false);
|
|
gl.disable(gl.DEPTH_TEST);
|
|
gl.disable(gl.DEPTH_TEST);
|
|
} else {
|
|
} else {
|
|
@@ -78335,7 +78348,7 @@ void main() {
|
|
let click = (e)=>{//一旦点击就立刻增加两marker
|
|
let click = (e)=>{//一旦点击就立刻增加两marker
|
|
|
|
|
|
if(ifAtWrongPlace(e))return
|
|
if(ifAtWrongPlace(e))return
|
|
-
|
|
|
|
|
|
+ if(e.clickElement)return //如点击label时focusOnObject
|
|
|
|
|
|
|
|
|
|
if(e.button === MOUSE.RIGHT)return
|
|
if(e.button === MOUSE.RIGHT)return
|
|
@@ -80078,26 +80091,28 @@ void main() {
|
|
|
|
|
|
class Compass extends EventDispatcher{
|
|
class Compass extends EventDispatcher{
|
|
|
|
|
|
- constructor(dom){
|
|
|
|
|
|
+ constructor(dom, viewport){
|
|
super();
|
|
super();
|
|
this.angle = 0;
|
|
this.angle = 0;
|
|
|
|
+ this.show = false;
|
|
if(dom){
|
|
if(dom){
|
|
this.dom = $(dom);
|
|
this.dom = $(dom);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ this.viewport = viewport;
|
|
this.init();
|
|
this.init();
|
|
- this.show = false;
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|
|
init(){
|
|
init(){
|
|
var width = 100, height = 100;
|
|
var width = 100, height = 100;
|
|
if(!this.dom){
|
|
if(!this.dom){
|
|
- this.dom = $('<div id="compass"></div>');
|
|
|
|
- $("#potree_render_area").append(this.dom);
|
|
|
|
|
|
+ this.dom = $('<div name="compass"></div>');
|
|
|
|
+ $(viewer.renderArea).append(this.dom);
|
|
}
|
|
}
|
|
- this.dom.css({/* display:"none", */ position:"absolute",right:"2%",top: "4%",width:width+"px",height:height+"px", "z-index":100,"pointer-events":"none" });
|
|
|
|
|
|
+ this.dom.css({ display:"none", position:"absolute",right:"1%",top: "60px",width:width+"px",height:height+"px", "z-index":100,"pointer-events":"none" });
|
|
|
|
|
|
let child = $("<div class='dirText north'><span>"+/* (config.lang=='zh'? */'北'/* :'N') */+"</span></div><div class='center'></div>");
|
|
let child = $("<div class='dirText north'><span>"+/* (config.lang=='zh'? */'北'/* :'N') */+"</span></div><div class='center'></div>");
|
|
this.dom.append(child);
|
|
this.dom.append(child);
|
|
@@ -80159,7 +80174,7 @@ void main() {
|
|
}
|
|
}
|
|
|
|
|
|
this.dom.find(".center")[0].appendChild(this.renderer.domElement);
|
|
this.dom.find(".center")[0].appendChild(this.renderer.domElement);
|
|
-
|
|
|
|
|
|
+ this.renderer.domElement.style.width = this.renderer.domElement.style.height = '100%';
|
|
|
|
|
|
|
|
|
|
this.camera = new PerspectiveCamera;
|
|
this.camera = new PerspectiveCamera;
|
|
@@ -80173,11 +80188,13 @@ void main() {
|
|
this.createCompass();
|
|
this.createCompass();
|
|
|
|
|
|
viewer.addEventListener('camera_changed', e => {
|
|
viewer.addEventListener('camera_changed', e => {
|
|
- if (e.viewport.name == 'MainView' && (e.changeInfo.positionChanged || e.changeInfo.quaternionChanged)) {
|
|
|
|
|
|
+ if (e.viewport == this.viewport && (e.changeInfo.positionChanged || e.changeInfo.quaternionChanged)) {
|
|
this.update();
|
|
this.update();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ this.setDomPos();
|
|
|
|
+ if(this.viewport)this.setDisplay(true);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -80261,8 +80278,8 @@ void main() {
|
|
}
|
|
}
|
|
|
|
|
|
update(quaternion){
|
|
update(quaternion){
|
|
- //if(!this.show)return;
|
|
|
|
- if(!quaternion) quaternion = viewer.mainViewport.camera.quaternion.clone();
|
|
|
|
|
|
+ if(!this.show)return;
|
|
|
|
+ if(!quaternion) quaternion = this.viewport.camera.quaternion.clone();
|
|
this.updateCamera(quaternion);
|
|
this.updateCamera(quaternion);
|
|
this.updateLabel(quaternion);
|
|
this.updateLabel(quaternion);
|
|
this.render();
|
|
this.render();
|
|
@@ -80270,39 +80287,39 @@ void main() {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- updateLabel(quaternion){//更新北标签
|
|
|
|
|
|
+ /*updateLabel(quaternion){//更新北标签
|
|
|
|
|
|
var dir = viewer.mainViewport.view.direction;
|
|
var dir = viewer.mainViewport.view.direction;
|
|
- var oriDir = initDir.clone(); //指南针最初始时的北方向
|
|
|
|
- var extraQua;
|
|
|
|
- /* if(objects.player.mode == "transitioning"){//当transitioning时,相机的quaternion不是用control的lookAt算出来,而是直接由一个quaternion过渡到另一个,这样相机将会是歪的,投影面也就不会是原先的水平面。
|
|
|
|
|
|
+ var oriDir = initDir.clone() //指南针最初始时的北方向
|
|
|
|
+ var extraQua
|
|
|
|
+ if(objects.player.mode == "transitioning"){//当transitioning时,相机的quaternion不是用control的lookAt算出来,而是直接由一个quaternion过渡到另一个,这样相机将会是歪的,投影面也就不会是原先的水平面。
|
|
var tempCamera = new THREE.Camera(); //借用camera的lookAt算出如果正视同样的target, quaternion会是什么值。 将它乘以当前相机quaternion,得到的就是相机歪的旋转值。
|
|
var tempCamera = new THREE.Camera(); //借用camera的lookAt算出如果正视同样的target, quaternion会是什么值。 将它乘以当前相机quaternion,得到的就是相机歪的旋转值。
|
|
tempCamera.position.copy(this.camera.position);
|
|
tempCamera.position.copy(this.camera.position);
|
|
tempCamera.lookAt(tempCamera.position.clone().add(dir))
|
|
tempCamera.lookAt(tempCamera.position.clone().add(dir))
|
|
var q = tempCamera.quaternion.inverse()
|
|
var q = tempCamera.quaternion.inverse()
|
|
extraQua = q.premultiply(quaternion) //歪掉的额外旋转值
|
|
extraQua = q.premultiply(quaternion) //歪掉的额外旋转值
|
|
|
|
|
|
- } */
|
|
|
|
|
|
+ }
|
|
|
|
|
|
//北标签的方向为指南针轮盘方向,也就是要将camera的方向投影到水平面上。 但是如果相机歪了,看到的世界都会歪一定角度,投影面也要歪一定角度。
|
|
//北标签的方向为指南针轮盘方向,也就是要将camera的方向投影到水平面上。 但是如果相机歪了,看到的世界都会歪一定角度,投影面也要歪一定角度。
|
|
- var up = new Vector3(0,0,1); //投影水平面的法线,也是相机的摆正的up方向
|
|
|
|
- extraQua && up.applyQuaternion(extraQua);
|
|
|
|
- dir.projectOnPlane(up); //将方向投影到水平面上; 如果相机不是正视(extraQua不为0001),就要将水平面也转动
|
|
|
|
- oriDir.projectOnPlane(up);//为什么initDir投影了和没有投影angle结果一样
|
|
|
|
- var angle = dir.angleTo(oriDir);
|
|
|
|
- if(dir.cross(oriDir).y > 0)angle = -angle;
|
|
|
|
|
|
+ var up = new THREE.Vector3(0,0,1) //投影水平面的法线,也是相机的摆正的up方向
|
|
|
|
+ extraQua && up.applyQuaternion(extraQua)
|
|
|
|
+ dir.projectOnPlane(up) //将方向投影到水平面上; 如果相机不是正视(extraQua不为0001),就要将水平面也转动
|
|
|
|
+ oriDir.projectOnPlane(up)//为什么initDir投影了和没有投影angle结果一样
|
|
|
|
+ var angle = dir.angleTo(oriDir)
|
|
|
|
+ if(dir.cross(oriDir).y > 0)angle = -angle
|
|
|
|
|
|
- var deg = this.angle - 90 + MathUtils.radToDeg(angle); //因为css写的样式初始是指向右方,和initDir差了90°,所以减去。
|
|
|
|
|
|
+ var deg = this.angle - 90 + THREE.Math.radToDeg(angle) //因为css写的样式初始是指向右方,和initDir差了90°,所以减去。
|
|
|
|
|
|
|
|
|
|
- this.dom.find(".dirText").css( "transform","rotate("+deg+"deg)" );
|
|
|
|
- this.dom.find(".dirText span").css("transform","rotate("+(-deg)+"deg)");
|
|
|
|
- }
|
|
|
|
|
|
+ this.dom.find(".dirText").css( "transform","rotate("+deg+"deg)" )
|
|
|
|
+ this.dom.find(".dirText span").css("transform","rotate("+(-deg)+"deg)")
|
|
|
|
+ } */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updateLabel(quaternion){//更新北标签
|
|
updateLabel(quaternion){//更新北标签
|
|
- let deg = MathUtils.radToDeg(viewer.mainViewport.view.yaw) - 90;
|
|
|
|
|
|
+ let deg = MathUtils.radToDeg(this.viewport.view.yaw) - 90;
|
|
this.dom.find(".dirText").css( "transform","rotate("+deg+"deg)" );
|
|
this.dom.find(".dirText").css( "transform","rotate("+deg+"deg)" );
|
|
this.dom.find(".dirText span").css("transform","rotate("+(-deg)+"deg)");
|
|
this.dom.find(".dirText span").css("transform","rotate("+(-deg)+"deg)");
|
|
}
|
|
}
|
|
@@ -80312,12 +80329,14 @@ void main() {
|
|
const radius = 5; //相机距离
|
|
const radius = 5; //相机距离
|
|
|
|
|
|
this.camera.quaternion.copy(quaternion);
|
|
this.camera.quaternion.copy(quaternion);
|
|
- var dir = viewer.mainViewport.view.direction; //相机朝向
|
|
|
|
|
|
+ var dir = this.viewport.view.direction; //相机朝向
|
|
this.camera.position.copy(dir.multiplyScalar(radius).negate()); //相机绕着指南针中心(000)转动
|
|
this.camera.position.copy(dir.multiplyScalar(radius).negate()); //相机绕着指南针中心(000)转动
|
|
}
|
|
}
|
|
|
|
+
|
|
render(){
|
|
render(){
|
|
this.renderer.render(this.scene, this.camera);
|
|
this.renderer.render(this.scene, this.camera);
|
|
}
|
|
}
|
|
|
|
+
|
|
setDisplay(state){
|
|
setDisplay(state){
|
|
this.show = !!state;
|
|
this.show = !!state;
|
|
if(this.show){
|
|
if(this.show){
|
|
@@ -80334,8 +80353,12 @@ void main() {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- setDomLeft(){
|
|
|
|
- this.dom.css({'right':'none','left':config.isMobile? "1%" : "2%"});
|
|
|
|
|
|
+ setDomPos(){
|
|
|
|
+ if(!this.viewport)return
|
|
|
|
+ let right = this.viewport.left + this.viewport.width;
|
|
|
|
+ this.dom.css({'right':((1-right)*100 + 1) + '%'});
|
|
|
|
+
|
|
|
|
+ //this.dom.css({'right':'none','left':config.isMobile? "1%" : "2%"})
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
@@ -80889,10 +80912,16 @@ void main() {
|
|
Utils.screenPass.render(viewer.renderer, this.edlMaterial, params.target);
|
|
Utils.screenPass.render(viewer.renderer, this.edlMaterial, params.target);
|
|
}else {
|
|
}else {
|
|
//渲染点云 (直接用rtEDL上的会失去抗锯齿)
|
|
//渲染点云 (直接用rtEDL上的会失去抗锯齿)
|
|
- viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, null , {
|
|
|
|
- shadowMaps: lights.length > 0 ? [this.shadowMap] : null,
|
|
|
|
- clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume))
|
|
|
|
- });
|
|
|
|
|
|
+
|
|
|
|
+ let prop = {
|
|
|
|
+ shadowMaps: lights.length > 0 ? [this.shadowMap] : null,
|
|
|
|
+ clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume))
|
|
|
|
+ };
|
|
|
|
+ if(Potree.settings.editType == 'merge'){//add 否则透明的点云会挡住后面的模型。 加上这句后竟然透明不会叠加了!
|
|
|
|
+ prop.depthTest = prop.depthWrite = true;
|
|
|
|
+ prop.notAdditiveBlending = true;
|
|
|
|
+ }
|
|
|
|
+ viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, null , prop);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -117905,6 +117934,13 @@ ENDSEC
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ this.secondCompass = new Compass(null);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
viewer.setControls(viewer.orbitControls);
|
|
viewer.setControls(viewer.orbitControls);
|
|
//viewer.mainViewport.view.fixZWhenPan = true
|
|
//viewer.mainViewport.view.fixZWhenPan = true
|
|
viewer.orbitControls.constantlyForward = true;
|
|
viewer.orbitControls.constantlyForward = true;
|
|
@@ -118102,9 +118138,12 @@ ENDSEC
|
|
this.transformControls2.view = viewer.viewports[1].view;
|
|
this.transformControls2.view = viewer.viewports[1].view;
|
|
this.transformControls2.camera = viewer.viewports[1].camera;
|
|
this.transformControls2.camera = viewer.viewports[1].camera;
|
|
this.transformControls2._gizmo.hideAxis = {translate:['x','y'], rotate:['x','y','z'] };
|
|
this.transformControls2._gizmo.hideAxis = {translate:['x','y'], rotate:['x','y','z'] };
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ viewer.compass.viewport = viewer.viewports[0];
|
|
|
|
+ viewer.compass.setDomPos();
|
|
|
|
+ this.secondCompass.viewport = viewer.viewports[1];
|
|
|
|
+ this.secondCompass.setDomPos();
|
|
|
|
+ this.secondCompass.setDisplay(true);
|
|
},
|
|
},
|
|
|
|
|
|
leaveSplit(){
|
|
leaveSplit(){
|
|
@@ -118122,6 +118161,9 @@ ENDSEC
|
|
this.transformControls._gizmo.hideAxis = {};
|
|
this.transformControls._gizmo.hideAxis = {};
|
|
viewer.setObjectLayers(this.transformControls, 'sceneObjects' ); //恢复
|
|
viewer.setObjectLayers(this.transformControls, 'sceneObjects' ); //恢复
|
|
|
|
|
|
|
|
+ viewer.compass.viewport = viewer.viewports[0];//恢复
|
|
|
|
+ viewer.compass.setDomPos();
|
|
|
|
+ this.secondCompass.setDisplay(false);
|
|
|
|
|
|
|
|
|
|
},
|
|
},
|
|
@@ -122980,7 +123022,7 @@ ENDSEC
|
|
|
|
|
|
exportSavingData(){//输出漫游点新的坐标和朝向、以及连接信息
|
|
exportSavingData(){//输出漫游点新的坐标和朝向、以及连接信息
|
|
let sweepLocations = {};
|
|
let sweepLocations = {};
|
|
-
|
|
|
|
|
|
+ let rotQua = new Quaternion().setFromAxisAngle(new Vector3(0,0,1), Math.PI);
|
|
for(let datasetId in Potree.settings.datasetsPanos ) {
|
|
for(let datasetId in Potree.settings.datasetsPanos ) {
|
|
let {panos} = Potree.settings.datasetsPanos[datasetId];
|
|
let {panos} = Potree.settings.datasetsPanos[datasetId];
|
|
let data = panos.map(pano=>{
|
|
let data = panos.map(pano=>{
|
|
@@ -122994,8 +123036,8 @@ ENDSEC
|
|
return Object.assign({}, pano.panosData, {
|
|
return Object.assign({}, pano.panosData, {
|
|
uuid: pano.uuid,
|
|
uuid: pano.uuid,
|
|
pose:{
|
|
pose:{
|
|
- translation: dealData(pano.position.clone().negate()),
|
|
|
|
- rotation: dealData(new Quaternion().setFromRotationMatrix(pano.panoMatrix) ),
|
|
|
|
|
|
+ translation: dealData(pano.position.clone()/* .negate() */),
|
|
|
|
+ rotation: dealData(new Quaternion().setFromRotationMatrix(pano.panoMatrix).premultiply(rotQua) ),
|
|
},
|
|
},
|
|
visibles,
|
|
visibles,
|
|
|
|
|
|
@@ -125877,9 +125919,7 @@ ENDSEC
|
|
render: function (scenes, camera, viewports, renderer, writeBuffer, readBuffer, maskActive, renderFun ) {
|
|
render: function (scenes, camera, viewports, renderer, writeBuffer, readBuffer, maskActive, renderFun ) {
|
|
if(!(scenes instanceof Array))scenes = [scenes];
|
|
if(!(scenes instanceof Array))scenes = [scenes];
|
|
|
|
|
|
- if(this.edgeStrength == 0){
|
|
|
|
- console.log('this.edgeStrength == 0');
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
if ( this.selectedObjects.length > 0 && this.edgeStrength > 0) {
|
|
if ( this.selectedObjects.length > 0 && this.edgeStrength > 0) {
|
|
|
|
|
|
@@ -126678,7 +126718,7 @@ ENDSEC
|
|
});
|
|
});
|
|
this.viewports = [this.mainViewport];
|
|
this.viewports = [this.mainViewport];
|
|
|
|
|
|
- Potree.settings.showCompass && (this.compass = new Compass(Potree.settings.compassDom));
|
|
|
|
|
|
+ Potree.settings.showCompass && (this.compass = new Compass(Potree.settings.compassDom, this.mainViewport));
|
|
this.magnifier = new Magnifier(this);
|
|
this.magnifier = new Magnifier(this);
|
|
this.reticule = new Reticule(this);
|
|
this.reticule = new Reticule(this);
|
|
this.scene.scene.add(this.magnifier);
|
|
this.scene.scene.add(this.magnifier);
|
|
@@ -129094,7 +129134,21 @@ ENDSEC
|
|
renderOverlay: this.renderOverlay.bind(this), force:!view.noPointcloud //如果要渲染点云,必须也一直渲染地图,否则地图会被覆盖(点云目前未能获取是否改变,也可能有其他动态物体,所以还是一直渲染的好)
|
|
renderOverlay: this.renderOverlay.bind(this), force:!view.noPointcloud //如果要渲染点云,必须也一直渲染地图,否则地图会被覆盖(点云目前未能获取是否改变,也可能有其他动态物体,所以还是一直渲染的好)
|
|
}));
|
|
}));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
|
|
|
|
+ view.render || this.clear(params);
|
|
|
|
+ pRenderer.clearTargets(params);
|
|
|
|
+
|
|
|
|
+ //先渲染不透明的model:
|
|
|
|
+ if(this.objs.children.length){
|
|
|
|
+ this.renderer.setRenderTarget(params.target||null);
|
|
|
|
+ this.setCameraLayers(params.camera, ['model'] );//先渲染模型后渲染点云,否则半透明的点云的blend没有混合模型的部分(但模型为何可以混合点云的部分?估计还是PotreeRenderer有问题)
|
|
|
|
+ /* this.objs.children.forEach(e=>{
|
|
|
|
+ this.updateVisible(e, 'renderOpa', e.opacity == 1)
|
|
|
|
+ }) */
|
|
|
|
+ this.renderer.render(this.scene.scene, params.camera);
|
|
|
|
+ }
|
|
|
|
+
|
|
if(!view.noPointcloud ){
|
|
if(!view.noPointcloud ){
|
|
|
|
|
|
//if(!params.target){
|
|
//if(!params.target){
|
|
@@ -129115,8 +129169,7 @@ ENDSEC
|
|
params.backgroundColor = view.backgroundColor;
|
|
params.backgroundColor = view.backgroundColor;
|
|
params.backgroundOpacity = view.backgroundOpacity;
|
|
params.backgroundOpacity = view.backgroundOpacity;
|
|
|
|
|
|
- view.render || this.clear(params);
|
|
|
|
- pRenderer.clearTargets(params);
|
|
|
|
|
|
+
|
|
pRenderer.render(params);
|
|
pRenderer.render(params);
|
|
|
|
|
|
}
|
|
}
|
|
@@ -129173,19 +129226,15 @@ ENDSEC
|
|
if(params.cameraLayers) cameraLayers = params.cameraLayers;
|
|
if(params.cameraLayers) cameraLayers = params.cameraLayers;
|
|
else {
|
|
else {
|
|
if(params.isMap)cameraLayers = ['bothMapAndScene'];
|
|
if(params.isMap)cameraLayers = ['bothMapAndScene'];
|
|
- else cameraLayers = ['sceneObjects', 'model', 'bothMapAndScene' ];
|
|
|
|
|
|
+ else cameraLayers = ['sceneObjects', /* 'model', */ 'bothMapAndScene' ];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
if(cameraLayers.length){
|
|
if(cameraLayers.length){
|
|
this.setCameraLayers(camera, cameraLayers, params.extraEnableLayers); //透明贴图层 skybox 、reticule marker 不能遮住测量线
|
|
this.setCameraLayers(camera, cameraLayers, params.extraEnableLayers); //透明贴图层 skybox 、reticule marker 不能遮住测量线
|
|
|
|
|
|
- /* if(this.outlinePass.selectedObjects.some(e=>e.isModel).length){
|
|
|
|
- this.composer.render(this.scene.scene, camera);
|
|
|
|
- }else{ */
|
|
|
|
- this.renderer.render(this.scene.scene, camera);
|
|
|
|
- //}
|
|
|
|
-
|
|
|
|
|
|
+ this.renderer.render(this.scene.scene, camera);
|
|
}
|
|
}
|
|
|
|
|
|
this.dispatchEvent({type: "render.pass.scene", viewer: viewer});
|
|
this.dispatchEvent({type: "render.pass.scene", viewer: viewer});
|
|
@@ -130503,6 +130552,7 @@ ENDSEC
|
|
let fileType = fileInfo.objurl ? 'obj' : 'glb';
|
|
let fileType = fileInfo.objurl ? 'obj' : 'glb';
|
|
let loadDone = (object, total, url)=>{
|
|
let loadDone = (object, total, url)=>{
|
|
//object.scale.set(1,1,1);//先获取原始的大小时的boundingBox
|
|
//object.scale.set(1,1,1);//先获取原始的大小时的boundingBox
|
|
|
|
+ object.opacity = 1; //初始化 记录
|
|
object.updateMatrixWorld();
|
|
object.updateMatrixWorld();
|
|
let weight = Math.round((total / 1024 / 1024) * 100) / 100;
|
|
let weight = Math.round((total / 1024 / 1024) * 100) / 100;
|
|
if(fileInfo.id != void 0)object.dataset_id = fileInfo.id;
|
|
if(fileInfo.id != void 0)object.dataset_id = fileInfo.id;
|