|
@@ -74433,7 +74433,7 @@ void main()
|
|
unloadedGeometry[i].node.load(unloadedGeometry[i].pointcloud.pcoGeometry);
|
|
unloadedGeometry[i].node.load(unloadedGeometry[i].pointcloud.pcoGeometry);
|
|
} */
|
|
} */
|
|
|
|
|
|
- let maxNodesLoading = Common$1.getBestCount('unloadedGeometry', viewer.lastFrameChanged?1:3, 10, 4, 15 /* , true */ );//dur在iphoneX中静止有7,pc是2 //!lastFrameChanged静止时加速下载
|
|
|
|
|
|
+ let maxNodesLoading = Common$1.getBestCount('unloadedGeometry', viewer.lastFrameChanged?2:4, 10, 4, 15 /* , true */ );//dur在iphoneX中静止有7,pc是2 //!lastFrameChanged静止时加速下载
|
|
//THREE.Math.clamp(Math.round(9 - dur), 1, 6 )
|
|
//THREE.Math.clamp(Math.round(9 - dur), 1, 6 )
|
|
//console.log('unloadedGeometry',unloadedGeometry.length, 'maxNodesLoading',maxNodesLoading)
|
|
//console.log('unloadedGeometry',unloadedGeometry.length, 'maxNodesLoading',maxNodesLoading)
|
|
//主要在手机端有效果。不改之前在展示的点云较多时前进会卡。
|
|
//主要在手机端有效果。不改之前在展示的点云较多时前进会卡。
|
|
@@ -82252,13 +82252,53 @@ void main()
|
|
}else {
|
|
}else {
|
|
let eyePos = viewer.mainViewport.camera.position;
|
|
let eyePos = viewer.mainViewport.camera.position;
|
|
let dir = viewer.mainViewport.view.direction; //new THREE.Vector3().subVectors(center,eyePos).normalize()
|
|
let dir = viewer.mainViewport.view.direction; //new THREE.Vector3().subVectors(center,eyePos).normalize()
|
|
|
|
+
|
|
|
|
+ let centerDir = new Vector3().subVectors(center,eyePos).normalize();
|
|
|
|
+ let p1Dir = new Vector3().subVectors(p1,eyePos).normalize();
|
|
|
|
+ let p2Dir = new Vector3().subVectors(p2,eyePos).normalize();
|
|
|
|
+
|
|
|
|
+ /* let cos1 = p1Dir.dot(centerDir)
|
|
|
|
+ let cos2 = p2Dir.dot(centerDir)
|
|
|
|
+ let diff = Math.abs(cos1/cos2)
|
|
|
|
+ diff = math.linearClamp(diff,0,2, ) */
|
|
|
|
+
|
|
|
|
+ let dis1 = p1.distanceToSquared(eyePos);
|
|
|
|
+ let dis2 = p2.distanceToSquared(eyePos);
|
|
|
|
+ let diff = Math.abs(dis1/dis2);
|
|
|
|
+ diff<1 && (diff = 1/diff);
|
|
|
|
+ diff = math.linearClamp(diff,0, 10, 0,1 );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /* if(centerDir.dot(dir)<0){//中点在相机后方,就不设置
|
|
|
|
+ label.setPos(center)
|
|
|
|
+ return
|
|
|
|
+ } */
|
|
|
|
+ let cos = dir.dot(this.lineDir);
|
|
|
|
+ let nearPoint = cos > 0 ? p2 : p1; //近端点。
|
|
|
|
+ let nearPointDir = new Vector3().subVectors(nearPoint,eyePos);
|
|
|
|
+ //使label在中点和近端点中变化, 近端点可能到了相机后方,需要投影到相机所在平面上
|
|
|
|
+ if(nearPointDir.dot(dir)<0){//近端点到了相机后方,前移。
|
|
|
|
+ let ray = new Raycaster();
|
|
|
|
+ ray.set(nearPoint, cos>0?this.lineDir:this.lineDir.clone().negate());
|
|
|
|
+ let camDirPlane = new Plane().setFromNormalAndCoplanarPoint(dir, eyePos);
|
|
|
|
+ nearPoint = ray.ray.intersectPlane(camDirPlane, new Vector3());
|
|
|
|
+ }
|
|
|
|
+
|
|
//let vec = label.sprite.lineDir
|
|
//let vec = label.sprite.lineDir
|
|
- let cos = dir.dot(this.lineDir);
|
|
|
|
|
|
+
|
|
|
|
+ let efficiency = 0.3; // 0-1 数值越高,r越容易接近1或-1,label越容易在倾斜后靠近近端点。
|
|
|
|
+ //let r = 0.5*efficiency*cos + 0.5
|
|
|
|
+ let r = 0.5*efficiency*diff*cos + 0.5;
|
|
|
|
+ r = MathUtils$1.clamp(r,0.1,0.9);
|
|
|
|
+
|
|
|
|
+ if(cos > 0){
|
|
|
|
+ center = p1.clone().multiplyScalar(1-r).add(nearPoint.clone().multiplyScalar(r)); //label在线上滑动,使尽量保持在视觉中心
|
|
|
|
+ }else {
|
|
|
|
+ center = nearPoint.clone().multiplyScalar(1-r).add(p2.clone().multiplyScalar(r)); //label在线上滑动,使尽量保持在视觉中心
|
|
|
|
+ }
|
|
|
|
|
|
- let efficiency = 0.35; // 0-1 数值越高,r越容易接近1或-1,label越容易在倾斜后靠近近端点。
|
|
|
|
- let r = 0.5*efficiency*cos + 0.5;
|
|
|
|
-
|
|
|
|
- center = p1.clone().multiplyScalar(1-r).add(p2.clone().multiplyScalar(r)); //label在线上滑动,使尽量保持在视觉中心
|
|
|
|
label.setPos(center);
|
|
label.setPos(center);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -84003,15 +84043,15 @@ void main()
|
|
|
|
|
|
|
|
|
|
render(o={}){
|
|
render(o={}){
|
|
- if(this.scene.children.length == 0)return
|
|
|
|
|
|
+ if(this.scene.children.filter(e=>e.visible).length == 0)return
|
|
|
|
|
|
Potree.Utils.setCameraLayers(o.camera, ['measure']);
|
|
Potree.Utils.setCameraLayers(o.camera, ['measure']);
|
|
|
|
|
|
- if(o.screenshot && this.viewer.fxaaPass.enabled){ //抗锯齿
|
|
|
|
|
|
+ /* if(o.screenshot && this.viewer.fxaaPass.enabled){ //抗锯齿
|
|
this.viewer.composer.render(this.scene, o.camera );
|
|
this.viewer.composer.render(this.scene, o.camera );
|
|
- }else {
|
|
|
|
|
|
+ }else{ */
|
|
this.viewer.renderer.render(this.scene, o.camera );
|
|
this.viewer.renderer.render(this.scene, o.camera );
|
|
- }
|
|
|
|
|
|
+ //}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
@@ -98460,7 +98500,7 @@ ENDSEC
|
|
let minTanBeta = minDis / height; /* (pano0.position.z - pano0.floorPosition.z) */
|
|
let minTanBeta = minDis / height; /* (pano0.position.z - pano0.floorPosition.z) */
|
|
let minBeta = Math.atan(minTanBeta);
|
|
let minBeta = Math.atan(minTanBeta);
|
|
const maxSinAlpha = Math.cos(minBeta); // 注:beta = Math/2 - alpha
|
|
const maxSinAlpha = Math.cos(minBeta); // 注:beta = Math/2 - alpha
|
|
- const skyHeight = 50;
|
|
|
|
|
|
+ const skyHeight = 100;
|
|
return function(pano0, pano1){
|
|
return function(pano0, pano1){
|
|
|
|
|
|
if(Potree.settings.displayMode != 'showPanos' || pano0 == pano1
|
|
if(Potree.settings.displayMode != 'showPanos' || pano0 == pano1
|
|
@@ -98562,7 +98602,7 @@ ENDSEC
|
|
dirs_ = dirs_.map(deg=> dir.clone().setZ(getZ(deg)).normalize() );
|
|
dirs_ = dirs_.map(deg=> dir.clone().setZ(getZ(deg)).normalize() );
|
|
|
|
|
|
|
|
|
|
- let max = 50;
|
|
|
|
|
|
+ let max = skyHeight;
|
|
let count2 = dirs_.length;
|
|
let count2 = dirs_.length;
|
|
let disArr = dirs_.map((dir_, i) =>{
|
|
let disArr = dirs_.map((dir_, i) =>{
|
|
let intersect = this.getIntersect(pano, dir_, origin);
|
|
let intersect = this.getIntersect(pano, dir_, origin);
|
|
@@ -131889,9 +131929,9 @@ ENDSEC
|
|
|
|
|
|
this.copyPass = new ShaderPass( CopyShader );
|
|
this.copyPass = new ShaderPass( CopyShader );
|
|
|
|
|
|
- viewer.addEventListener('resize',(e)=>{
|
|
|
|
- this.setSize(e.viewport.resolution2.x,e.viewport.resolution2.y); //暂时假设composer渲染的viewer的viewports.length == 1
|
|
|
|
- });
|
|
|
|
|
|
+ /* viewer.addEventListener('resize',(e)=>{
|
|
|
|
+ this.setSize(e.viewport.resolution2.x,e.viewport.resolution2.y) //暂时假设composer渲染的viewer的viewports.length == 1
|
|
|
|
+ }) */
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
@@ -131936,6 +131976,10 @@ ENDSEC
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if(oldTarget){
|
|
|
|
+ this.setSize(oldTarget.width,oldTarget.height);
|
|
|
|
+ }
|
|
|
|
+
|
|
for ( i = 0; i < il; i ++ ) {
|
|
for ( i = 0; i < il; i ++ ) {
|
|
|
|
|
|
pass = passes[ i ];
|
|
pass = passes[ i ];
|
|
@@ -132015,7 +132059,7 @@ ENDSEC
|
|
|
|
|
|
scaleRatio = scaleRatio || this.scaleRatio || 1;
|
|
scaleRatio = scaleRatio || this.scaleRatio || 1;
|
|
//console.log('setSize', width * scaleRatio, height * scaleRatio)
|
|
//console.log('setSize', width * scaleRatio, height * scaleRatio)
|
|
- let maxTexWidth = 8192;
|
|
|
|
|
|
+ let maxTexWidth = 4096;//否则黑的
|
|
let w = width * scaleRatio;
|
|
let w = width * scaleRatio;
|
|
let h = height * scaleRatio;
|
|
let h = height * scaleRatio;
|
|
if(w > maxTexWidth || h > maxTexWidth){ //超出会崩溃
|
|
if(w > maxTexWidth || h > maxTexWidth){ //超出会崩溃
|
|
@@ -132028,7 +132072,7 @@ ENDSEC
|
|
w = width * scaleRatio;
|
|
w = width * scaleRatio;
|
|
h = height * scaleRatio;
|
|
h = height * scaleRatio;
|
|
|
|
|
|
-
|
|
|
|
|
|
+ console.log('setSize', w,h, width,height,this.scaleRatio);
|
|
this.renderTarget1.setSize( w, h );
|
|
this.renderTarget1.setSize( w, h );
|
|
this.renderTarget2.setSize( w, h );
|
|
this.renderTarget2.setSize( w, h );
|
|
|
|
|
|
@@ -132395,7 +132439,7 @@ ENDSEC
|
|
}
|
|
}
|
|
|
|
|
|
void main() {
|
|
void main() {
|
|
- const float edgeDetectionQuality = 0.1 ;//.05 ; //越高,越保留细节;越低,越平滑 但模糊
|
|
|
|
|
|
+ const float edgeDetectionQuality = 0.9 ;//.05 ; //越高,越保留细节;越低,越平滑 但模糊
|
|
const float invEdgeDetectionQuality = 1. / edgeDetectionQuality;
|
|
const float invEdgeDetectionQuality = 1. / edgeDetectionQuality;
|
|
|
|
|
|
gl_FragColor = FxaaPixelShader(
|
|
gl_FragColor = FxaaPixelShader(
|
|
@@ -133606,7 +133650,7 @@ ENDSEC
|
|
let speed;
|
|
let speed;
|
|
let pano = viewer.images360.findNearestPano();
|
|
let pano = viewer.images360.findNearestPano();
|
|
if(!pano){
|
|
if(!pano){
|
|
- if(!viewer.bound)return
|
|
|
|
|
|
+ if(!viewer.bound || viewer.bound.boundSize.x == 0)return
|
|
let boundFloor = viewer.bound.boundingBox.clone();
|
|
let boundFloor = viewer.bound.boundingBox.clone();
|
|
boundFloor.max.z = boundFloor.min.z;
|
|
boundFloor.max.z = boundFloor.min.z;
|
|
speed = boundFloor.distanceToPoint(viewer.mainViewport.view.position);
|
|
speed = boundFloor.distanceToPoint(viewer.mainViewport.view.position);
|
|
@@ -137244,7 +137288,7 @@ ENDSEC
|
|
var sid = Date.now();
|
|
var sid = Date.now();
|
|
//抗锯齿待加 1 post处理 2截图大张再抗锯齿缩小
|
|
//抗锯齿待加 1 post处理 2截图大张再抗锯齿缩小
|
|
|
|
|
|
- console.log('startScreenshot: '+sid);
|
|
|
|
|
|
+ console.warn('startScreenshot: '+sid,width,height);
|
|
|
|
|
|
let updateCamera = ()=>{
|
|
let updateCamera = ()=>{
|
|
this.viewports.forEach(e=>{
|
|
this.viewports.forEach(e=>{
|
|
@@ -137265,9 +137309,16 @@ ENDSEC
|
|
|
|
|
|
this.needRender = true;
|
|
this.needRender = true;
|
|
|
|
|
|
- let { dataUrl } = viewerMaster.makeScreenshot( new Vector2(width,height), null, compressRatio );
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ if(info.useRenderTarget){
|
|
|
|
+ //离屏渲染 有抗锯齿问题、在手机上速度慢
|
|
|
|
+ var { dataUrl } = viewerMaster.makeScreenshot( new Vector2(width,height), null, compressRatio );
|
|
|
|
+
|
|
|
|
+ }else {
|
|
|
|
+ //直接渲染 会改变canvas大小
|
|
|
|
+ let canvas = this.renderArea.getElementsByTagName('canvas')[0];
|
|
|
|
+ this.render({ screenshot : true, width , height, resize :true }); //需要resize
|
|
|
|
+ var dataUrl = canvas.toDataURL('image/jpeg',compressRatio);
|
|
|
|
+ }
|
|
|
|
|
|
if(!Potree.settings.isOfficial){
|
|
if(!Potree.settings.isOfficial){
|
|
Common$1.downloadFile(dataUrl, 'screenshot.jpg');
|
|
Common$1.downloadFile(dataUrl, 'screenshot.jpg');
|
|
@@ -137279,8 +137330,8 @@ ENDSEC
|
|
|
|
|
|
oldStates.viewports.forEach(old=>{//恢复相机
|
|
oldStates.viewports.forEach(old=>{//恢复相机
|
|
var viewport = viewports.find(v=>v.name == old.name);
|
|
var viewport = viewports.find(v=>v.name == old.name);
|
|
- viewport.left = old.left;
|
|
|
|
- viewport.width = old.width;
|
|
|
|
|
|
+ viewport.left = old.left; viewport.bottom = old.bottom;
|
|
|
|
+ viewport.width = old.width; viewport.height = old.height;
|
|
viewport.view.copy(old.view);
|
|
viewport.view.copy(old.view);
|
|
viewport.view.applyToCamera(viewport.camera);
|
|
viewport.view.applyToCamera(viewport.camera);
|
|
|
|
|
|
@@ -137304,7 +137355,7 @@ ENDSEC
|
|
if(!this.screenshoting){
|
|
if(!this.screenshoting){
|
|
//Potree.settings.pointNoLimit = false
|
|
//Potree.settings.pointNoLimit = false
|
|
Potree.settings.pointDensity = 'high';
|
|
Potree.settings.pointDensity = 'high';
|
|
- console.log('恢复pointDensity');
|
|
|
|
|
|
+ console.warn('恢复pointDensity');
|
|
if(viewer.scene.pointclouds[0].material.oldSize_ ){
|
|
if(viewer.scene.pointclouds[0].material.oldSize_ ){
|
|
viewer.scene.pointclouds[0].material.size = viewer.scene.pointclouds[0].material.oldSize_;
|
|
viewer.scene.pointclouds[0].material.size = viewer.scene.pointclouds[0].material.oldSize_;
|
|
viewer.scene.pointclouds[0].material.oldSize_ = null;
|
|
viewer.scene.pointclouds[0].material.oldSize_ = null;
|
|
@@ -137313,7 +137364,7 @@ ENDSEC
|
|
},500); //延迟:避免连续多次截图时释放点云
|
|
},500); //延迟:避免连续多次截图时释放点云
|
|
this.screenshoting = false;
|
|
this.screenshoting = false;
|
|
|
|
|
|
- console.log('screenshot done: '+sid);
|
|
|
|
|
|
+ console.warn('screenshot done: '+sid);
|
|
};
|
|
};
|
|
|
|
|
|
{//恢复:
|
|
{//恢复:
|
|
@@ -137453,34 +137504,35 @@ ENDSEC
|
|
let pano = this.images360.findNearestPano();
|
|
let pano = this.images360.findNearestPano();
|
|
let dis = pano.position.distanceTo(this.mainViewport.camera.position);
|
|
let dis = pano.position.distanceTo(this.mainViewport.camera.position);
|
|
if(dis > 3) floorplanView = true; //离远一点的平视希望也是全部加载好。勉强只能这么写
|
|
if(dis > 3) floorplanView = true; //离远一点的平视希望也是全部加载好。勉强只能这么写
|
|
- console.log('floorplanView',floorplanView);
|
|
|
|
|
|
+ console.warn('floorplanView',floorplanView);
|
|
}
|
|
}
|
|
|
|
|
|
- let maxTime = floorplanView ? 10000 : 2000; //注意交通一般要截图两次,先截带测量线的
|
|
|
|
|
|
+ let maxTime = floorplanView ? 3000 : 1500; //注意交通一般要截图两次,先截带测量线的
|
|
setTimeout(()=>{
|
|
setTimeout(()=>{
|
|
if(Potree.pointsLoading && Potree.settings.displayMode == 'showPointCloud'){//如果还在加载
|
|
if(Potree.pointsLoading && Potree.settings.displayMode == 'showPointCloud'){//如果还在加载
|
|
viewer.addEventListener('pointsLoaded',()=>{ //点云加载完时(不一定准确)
|
|
viewer.addEventListener('pointsLoaded',()=>{ //点云加载完时(不一定准确)
|
|
- if(!finish)console.log('加载完毕', ' numVisiblePoints', Potree.numVisiblePoints);
|
|
|
|
|
|
+ if(!finish)console.warn('加载完毕', ' numVisiblePoints', Potree.numVisiblePoints);
|
|
dealDone();
|
|
dealDone();
|
|
},{once:true});
|
|
},{once:true});
|
|
let lastNumVisiblePoints;
|
|
let lastNumVisiblePoints;
|
|
if(floorplanView){ //perspective的不需要,远处加载不完也没大碍
|
|
if(floorplanView){ //perspective的不需要,远处加载不完也没大碍
|
|
setTimeout(()=>{//超时不候
|
|
setTimeout(()=>{//超时不候
|
|
if(!finish /* && Potree.numVisiblePoints > Potree.pointBudget * 0.7 */){
|
|
if(!finish /* && Potree.numVisiblePoints > Potree.pointBudget * 0.7 */){
|
|
- console.log('加载时间达最长限制的40%,降level, numVisiblePoints', Potree.numVisiblePoints);
|
|
|
|
|
|
+ console.warn('加载时间达最长限制的50%,降level, numVisiblePoints', Potree.numVisiblePoints);
|
|
lastNumVisiblePoints = Potree.numVisiblePoints;
|
|
lastNumVisiblePoints = Potree.numVisiblePoints;
|
|
decreaseLevel(); //加载时间过长
|
|
decreaseLevel(); //加载时间过长
|
|
}
|
|
}
|
|
- },maxTime*0.4);
|
|
|
|
|
|
+ },maxTime*0.5);
|
|
setTimeout(()=>{// 第一次降有可能没效果,因为大部分level不是最高的
|
|
setTimeout(()=>{// 第一次降有可能没效果,因为大部分level不是最高的
|
|
- if(!finish && (Potree.numVisiblePoints - lastNumVisiblePoints) > -10000 ){ //没怎么降
|
|
|
|
- console.log('加载时间达最长限制的50%,降level, numVisiblePoints', Potree.numVisiblePoints);
|
|
|
|
|
|
+ console.warn('加载时间达最长限制的60%,numVisiblePoints', Potree.numVisiblePoints);
|
|
|
|
+ if(!finish && (Potree.numVisiblePoints - lastNumVisiblePoints) > -20000 ){ //没怎么降
|
|
|
|
+ console.warn('加载时间达最长限制的60%,降level, numVisiblePoints', Potree.numVisiblePoints);
|
|
decreaseLevel(); //加载时间过长
|
|
decreaseLevel(); //加载时间过长
|
|
}
|
|
}
|
|
- },maxTime*0.5);
|
|
|
|
|
|
+ },maxTime*0.6);
|
|
}
|
|
}
|
|
setTimeout(()=>{//超时不候
|
|
setTimeout(()=>{//超时不候
|
|
- if(!finish)console.log('超时, numVisiblePoints', Potree.numVisiblePoints);
|
|
|
|
|
|
+ if(!finish)console.warn('超时, numVisiblePoints', Potree.numVisiblePoints);
|
|
dealDone();
|
|
dealDone();
|
|
},maxTime);
|
|
},maxTime);
|
|
}else {
|
|
}else {
|
|
@@ -137493,7 +137545,7 @@ ENDSEC
|
|
let levels = viewer.scene.pointclouds[0].visibleNodes.map(e=>e.getLevel());
|
|
let levels = viewer.scene.pointclouds[0].visibleNodes.map(e=>e.getLevel());
|
|
//console.log(levels)
|
|
//console.log(levels)
|
|
let actMaxLevel = Math.max.apply(null, levels); //实际加载到的最高的node level
|
|
let actMaxLevel = Math.max.apply(null, levels); //实际加载到的最高的node level
|
|
- console.log('decreaseLevel, 新maxLevel', actMaxLevel - 1, '原maxlevel', viewer.scene.pointclouds[0].maxLevel, 'numVisiblePoints', Potree.numVisiblePoints);
|
|
|
|
|
|
+ console.warn('decreaseLevel, 新maxLevel', actMaxLevel - 1, '原maxlevel', viewer.scene.pointclouds[0].maxLevel, 'numVisiblePoints', Potree.numVisiblePoints);
|
|
viewer.scene.pointclouds[0].maxLevel = actMaxLevel - 1;
|
|
viewer.scene.pointclouds[0].maxLevel = actMaxLevel - 1;
|
|
viewer.scene.pointclouds[0].material.oldSize_ = viewer.scene.pointclouds[0].material.size;
|
|
viewer.scene.pointclouds[0].material.oldSize_ = viewer.scene.pointclouds[0].material.size;
|
|
viewer.scene.pointclouds[0].material.size *= 1.5;
|
|
viewer.scene.pointclouds[0].material.size *= 1.5;
|
|
@@ -139611,7 +139663,7 @@ ENDSEC
|
|
let pointBudget = 1 * 1000 * 1000;
|
|
let pointBudget = 1 * 1000 * 1000;
|
|
let framenumber = 0;
|
|
let framenumber = 0;
|
|
let numNodesLoading = 0;
|
|
let numNodesLoading = 0;
|
|
- let maxNodesLoading = 6;
|
|
|
|
|
|
+ let maxNodesLoading = 10;
|
|
|
|
|
|
const debug = {};
|
|
const debug = {};
|
|
|
|
|