|
@@ -67,7 +67,12 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
|
|
|
|
|
|
updateMap()
|
|
|
- }
|
|
|
+
|
|
|
+ Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{
|
|
|
+ updateCamNear()
|
|
|
+ }, 1000)
|
|
|
+
|
|
|
+ }
|
|
|
})
|
|
|
|
|
|
|
|
@@ -92,6 +97,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
changeMeshVisi(model, true)
|
|
|
//MergeEditor.selectModel(model)
|
|
|
//model.result_.flyInPano(e.toPano.pano, {dontFly:true}) //切换模型显示,因为flyInPano有事件怕乱所以统一用这个函数
|
|
|
+ updateCamNear()
|
|
|
}
|
|
|
|
|
|
})
|
|
@@ -127,6 +133,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
})
|
|
|
|
|
|
Potree.settings.unableNavigate = e.mode == 'showPointCloud'
|
|
|
+ updateCamNear()
|
|
|
})
|
|
|
|
|
|
|
|
@@ -136,6 +143,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
viewer.mainViewport.view.radius = 0.1 //使pivot在面前一丢丢距离
|
|
|
viewer.setControls(viewer.orbitControls)
|
|
|
viewer.removeEventListener('camera_changed', camera_changed)
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
let requestInPano = false
|
|
@@ -886,6 +894,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
if (model) {
|
|
|
let fly = viewer.images360.latestRequestMode != 'showPanos'
|
|
|
MergeEditor.selectModel(model, state, fly, true)
|
|
|
+ updateCamNear()
|
|
|
|
|
|
//console.log('changeSelect', props.id, state)
|
|
|
}
|
|
@@ -1409,19 +1418,43 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
- /* updateCamNear(){
|
|
|
- let near = 0.0001, far = 0.1
|
|
|
-
|
|
|
- Potree.config.view.near = 0.0001 //以防有的漫游场景模型缩放的很小(0.1%) 但似乎会造成z-fighting,不记得之前是否有过bug
|
|
|
+ function updateCamNear(type){// 有的漫游场景模型缩放的很小(0.1%),需要缩小near才能看见, 但会造成z-fighting, 离远了看大模型会闪烁
|
|
|
+ const min = 0.0001, max = 0.1
|
|
|
+ let near , bigScale = 0.2
|
|
|
|
|
|
- if(Potree.settings.displayMode == 'showPanos'){
|
|
|
+ if(Potree.settings.displayMode == 'showPanos'/* && type != 'cameraMove' */){
|
|
|
+ let currentModel = viewer.images360.currentPano.pointcloud
|
|
|
+ near = Potree.math.linearClamp(currentModel.scale.x, [0, 1], [min, max])
|
|
|
|
|
|
+ }else/* if(type == 'cameraMove') */{
|
|
|
+ //没有完美的解决方式,优先考虑选中的模型。否则优先考虑离得近的。 另外尽量用大的,因为缩很小的情况很少。
|
|
|
+ //虽然案例说应该看model.bound.size,但如果非场景模型,缩很小的话也不需要凑近看。
|
|
|
+ let allModels = viewer.objs.children.concat(viewer.scene.pointclouds)
|
|
|
+ if(allModels.length == 0)return
|
|
|
+ allModels.sort((a,b)=>{return a.scale.x - b.scale.x})
|
|
|
|
|
|
+ let minS = allModels[0].scale.x, maxS = allModels.pop().scale.x
|
|
|
+ let considerModel
|
|
|
+ if(minS>bigScale) near = max
|
|
|
+ else{
|
|
|
+ if(MergeEditor.selected){
|
|
|
+ considerModel = MergeEditor.selected
|
|
|
+ near = Potree.math.linearClamp(considerModel.scale.x, [0, bigScale], [min, max])
|
|
|
+ }else{
|
|
|
+ //allModels = allModels.filter() //写不下去了好难,就算了吧, 折中
|
|
|
+ near = Potree.math.linearClamp(minS, [0, bigScale], [max/4, max])
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ if(near != viewer.mainViewport.camera.near){
|
|
|
+ console.log('updateNear',near)
|
|
|
+ viewer.mainViewport.camera.near = near
|
|
|
+ viewer.mainViewport.camera.updateProjectionMatrix()
|
|
|
+ viewer.dispatchEvent('content_changed')
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
- } */
|
|
|
+ }
|
|
|
|
|
|
function updateMap( ){
|
|
|
|