|
@@ -69893,6 +69893,10 @@ void main() {
|
|
|
|
|
|
// 设置点透明度
|
|
|
changePointOpacity(num, canMoreThanOne) {
|
|
|
+ if(Potree.settings.editType == 'merge'){ //not AdditiveBlending
|
|
|
+ return this.material.opacity = num
|
|
|
+ }
|
|
|
+
|
|
|
//num:0-1 navvis用的是亮度
|
|
|
if (num == void 0) {
|
|
|
num = this.temp.pointOpacity;
|
|
@@ -69902,7 +69906,8 @@ void main() {
|
|
|
|
|
|
if (num == 1) {
|
|
|
this.material.opacity = 1;
|
|
|
- } else {
|
|
|
+ } else {
|
|
|
+
|
|
|
let str = (Potree.settings.sizeFitToLevel?'sizeFit:':'')+ (canMoreThanOne ? 'canMoreThanOne:':'') +this.temp.pointOpacity+':'+this.maxLevel+':'+this.nodeMaxLevel;
|
|
|
let value = this.temp.opacity[str]; //储存。防止每次渲染(反复切换density)都要算。
|
|
|
if(value){
|
|
@@ -72375,7 +72380,13 @@ void main() {
|
|
|
|
|
|
if (transparent){
|
|
|
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.disable(gl.DEPTH_TEST);
|
|
|
} else {
|
|
@@ -80889,10 +80900,16 @@ void main() {
|
|
|
Utils.screenPass.render(viewer.renderer, this.edlMaterial, params.target);
|
|
|
}else {
|
|
|
//渲染点云 (直接用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);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -129094,7 +129111,20 @@ ENDSEC
|
|
|
renderOverlay: this.renderOverlay.bind(this), force:!view.noPointcloud //如果要渲染点云,必须也一直渲染地图,否则地图会被覆盖(点云目前未能获取是否改变,也可能有其他动态物体,所以还是一直渲染的好)
|
|
|
}));
|
|
|
}
|
|
|
+
|
|
|
|
|
|
+ view.render || this.clear(params);
|
|
|
+ pRenderer.clearTargets(params);
|
|
|
+
|
|
|
+ //先渲染不透明的model:
|
|
|
+ if(this.objs.children.length){
|
|
|
+ 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(!params.target){
|
|
@@ -129115,8 +129145,7 @@ ENDSEC
|
|
|
params.backgroundColor = view.backgroundColor;
|
|
|
params.backgroundOpacity = view.backgroundOpacity;
|
|
|
|
|
|
- view.render || this.clear(params);
|
|
|
- pRenderer.clearTargets(params);
|
|
|
+
|
|
|
pRenderer.render(params);
|
|
|
|
|
|
}
|
|
@@ -129173,19 +129202,15 @@ ENDSEC
|
|
|
if(params.cameraLayers) cameraLayers = params.cameraLayers;
|
|
|
else {
|
|
|
if(params.isMap)cameraLayers = ['bothMapAndScene'];
|
|
|
- else cameraLayers = ['sceneObjects', 'model', 'bothMapAndScene' ];
|
|
|
+ else cameraLayers = ['sceneObjects', /* 'model', */ 'bothMapAndScene' ];
|
|
|
}
|
|
|
|
|
|
+
|
|
|
|
|
|
if(cameraLayers.length){
|
|
|
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});
|
|
@@ -130503,6 +130528,7 @@ ENDSEC
|
|
|
let fileType = fileInfo.objurl ? 'obj' : 'glb';
|
|
|
let loadDone = (object, total, url)=>{
|
|
|
//object.scale.set(1,1,1);//先获取原始的大小时的boundingBox
|
|
|
+ object.opacity = 1; //初始化 记录
|
|
|
object.updateMatrixWorld();
|
|
|
let weight = Math.round((total / 1024 / 1024) * 100) / 100;
|
|
|
if(fileInfo.id != void 0)object.dataset_id = fileInfo.id;
|