|
@@ -911,13 +911,13 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
|
|
|
|
|
|
- ifPointBlockedByIntersect(pos3d , panoId, soon ){//点是否被遮挡
|
|
|
+ ifPointBlockedByIntersect(point , panoId, soon ){//点是否被遮挡
|
|
|
let ifShelter
|
|
|
let now = Date.now()
|
|
|
let extraPanoId = panoId != void 0
|
|
|
if(!this.shelterCount)return
|
|
|
|
|
|
- let history = shelterHistory.find(e=>e.pos3d.equals(pos3d))
|
|
|
+ let history = shelterHistory.find(e=>e.point.equals(point))
|
|
|
let cameraPos = this.mainViewport.view.position.clone()
|
|
|
if(panoId == void 0){
|
|
|
if(this.images360.isAtPano(0.05)){
|
|
@@ -940,7 +940,7 @@ export class Viewer extends ViewerBase{
|
|
|
shelterHistory.splice(index, 1)
|
|
|
|
|
|
}else{//新增
|
|
|
- history = {pos3d, panos:{}, notAtPano:{}}
|
|
|
+ history = {point, panos:{}, notAtPano:{}}
|
|
|
|
|
|
const minCount = 100
|
|
|
if(shelterHistory.length > minCount){//去除最早的
|
|
@@ -964,21 +964,21 @@ export class Viewer extends ViewerBase{
|
|
|
if(panoId != void 0){
|
|
|
let pano = this.images360.getPano(panoId)
|
|
|
if((soon || this.shelterCount.byTex<this.shelterCount.maxByTex) && pano.depthTex){
|
|
|
- ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d, margin:Potree.config.shelterMargin, useDepthTex:true, pano, viewport:this.mainViewport } )
|
|
|
+ ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point, margin:Potree.config.shelterMargin, useDepthTex:true, pano, viewport:this.mainViewport } )
|
|
|
history.panos[panoId] = ifShelter
|
|
|
this.shelterCount.byTex ++ ;
|
|
|
- //console.log('computeByTex direct', panoId, pos3d, ifShelter)
|
|
|
+ //console.log('computeByTex direct', panoId, point, ifShelter)
|
|
|
}else{
|
|
|
- //console.log('延迟tex',panoId, pos3d )
|
|
|
+ //console.log('延迟tex',panoId, point )
|
|
|
history.waitCompute = {panoId, forceGet:extraPanoId }
|
|
|
return useLastResult()
|
|
|
}
|
|
|
}else{
|
|
|
if(/* history.ifShelter == void 0 || */ this.shelterCount.byCloud<this.shelterCount.maxByCloud){//弊端:第一个总是直接计算,后面的都是延后。但无法改进,因是一个个传进来的,无法预测。
|
|
|
- ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d, margin:Potree.config.shelterMargin, pickWindowSize:3} )
|
|
|
+ ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point, margin:Potree.config.shelterMargin, pickWindowSize:3} )
|
|
|
history.notAtPano = {cameraPos , ifShelter }
|
|
|
this.shelterCount.byCloud ++ ;
|
|
|
- //console.log('computeByCloud direct', pos3d.toArray())
|
|
|
+ //console.log('computeByCloud direct', point.toArray())
|
|
|
}else{
|
|
|
//console.log('延迟cloud' )
|
|
|
history.waitCompute = {cameraPos}
|
|
@@ -1034,11 +1034,11 @@ export class Viewer extends ViewerBase{
|
|
|
if(byTex >= maxTexCount)break
|
|
|
|
|
|
byTex ++
|
|
|
- let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d:history.pos3d, margin:Potree.config.shelterMargin, useDepthTex:true, viewport:this.mainViewport } )
|
|
|
+ let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point:history.point, margin:Potree.config.shelterMargin, useDepthTex:true, viewport:this.mainViewport } )
|
|
|
history.panos[this.images360.currentPano.id] = ifShelter
|
|
|
history.ifShelter = ifShelter
|
|
|
delete history.waitCompute
|
|
|
- //console.log('补1', history.pos3d.toArray())
|
|
|
+ //console.log('补1', history.point.toArray())
|
|
|
}else{
|
|
|
if(this.images360.currentPano.pointcloud.hasDepthTex){
|
|
|
//先等待加载完深度图
|
|
@@ -1077,14 +1077,14 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
|
|
|
|
|
|
- let list = waitCloud2.map(e=>e.pos3d)
|
|
|
+ let list = waitCloud2.map(e=>e.point)
|
|
|
let result = Common.batchHandling.getSlice('shelterByCloud', list, {maxUseCount:maxCloudCount,useEquals:true, stopWhenAllUsed:true} ) //iphonex稳定后大概在7-10。
|
|
|
//list.length>0 && console.log('list',list, maxCloudCount)
|
|
|
|
|
|
result.list.forEach(e=>{
|
|
|
- let history = waitCloud2.find(a=>a.pos3d.equals(e))
|
|
|
+ let history = waitCloud2.find(a=>a.point.equals(e))
|
|
|
|
|
|
- let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({pos3d:history.pos3d, margin: Potree.config.shelterMargin , pickWindowSize:3, viewport:this.mainViewport} )
|
|
|
+ let ifShelter = !!viewer.inputHandler.ifBlockedByIntersect({point:history.point, margin: Potree.config.shelterMargin , pickWindowSize:3, viewport:this.mainViewport} )
|
|
|
|
|
|
if(history.waitCompute.cameraPos){
|
|
|
history.notAtPano = {cameraPos: history.waitCompute.cameraPos , ifShelter }
|
|
@@ -1093,7 +1093,7 @@ export class Viewer extends ViewerBase{
|
|
|
}
|
|
|
history.ifShelter = ifShelter
|
|
|
byCloud++
|
|
|
- //console.log('补2', history.pos3d.toArray())
|
|
|
+ //console.log('补2', history.point.toArray())
|
|
|
delete history.waitCompute
|
|
|
})
|
|
|
|
|
@@ -4074,12 +4074,12 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
if(0 ){//如果没有被选中,会被遮挡。 2023.11.15 最好展示全局(尤其截图时),虽然被遮挡,但focus的过程是选中状态全显示的,可以看出所在范围。
|
|
|
let checkIntersect = ( )=>{
|
|
|
- let intersect = this.inputHandler.ifBlockedByIntersect({pos3d:position, cameraPos: target})// 不一定准确
|
|
|
+ let intersect = this.inputHandler.ifBlockedByIntersect({point:position, cameraPos: target})// 不一定准确
|
|
|
if(intersect){
|
|
|
let blockCount = 0, unblockCount = 0, visi;
|
|
|
for(let i=0;i<object.points.length;i++){ //如果顶点超过一半不可见,就要更改位置
|
|
|
let p = object.points[i]
|
|
|
- let blocked = this.inputHandler.ifBlockedByIntersect({pos3d:p, margin:0.3 , cameraPos:position, pickWindowSize:4});
|
|
|
+ let blocked = this.inputHandler.ifBlockedByIntersect({point:p, margin:0.3 , cameraPos:position, pickWindowSize:4});
|
|
|
if(blocked){
|
|
|
blockCount ++;
|
|
|
if(blockCount / object.points.length >= 0.5){
|
|
@@ -4110,7 +4110,7 @@ export class Viewer extends ViewerBase{
|
|
|
let position1 = position.clone()
|
|
|
let dir = new THREE.Vector3().subVectors(position, target)
|
|
|
position.copy(target).sub(dir)
|
|
|
- let intersect2 = this.inputHandler.ifBlockedByIntersect({pos3d: position, cameraPos:target})// 不一定准确
|
|
|
+ let intersect2 = this.inputHandler.ifBlockedByIntersect({point: position, cameraPos:target})// 不一定准确
|
|
|
if(intersect2){
|
|
|
if(intersect2.distance < intersect.distance ){
|
|
|
position.copy(position1)//恢复
|
|
@@ -4222,7 +4222,7 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
if(o.checkIntersect){//识别被点云遮住的话
|
|
|
let intersect //反向查找从target到相机的第一个intersect
|
|
|
- intersect = this.inputHandler.ifBlockedByIntersect({pos3d:position, margin:0, cameraPos:target} /* {pos3d:target, margin: 0.2, cameraPos:position} */)
|
|
|
+ intersect = this.inputHandler.ifBlockedByIntersect({point:position, margin:0, cameraPos:target} /* {point:target, margin: 0.2, cameraPos:position} */)
|
|
|
|
|
|
if(intersect){
|
|
|
position.copy(intersect.location)
|