Преглед на файлове

fix: 代码更新,4k支持

xzw преди 2 години
родител
ревизия
3eb84f603b
променени са 2 файла, в които са добавени 65 реда и са изтрити 69 реда
  1. 2 1
      scene/public/static/js/Hot.js
  2. 63 68
      scene/public/static/js/main_2020_show.js

+ 2 - 1
scene/public/static/js/Hot.js

@@ -1416,11 +1416,12 @@ window.initHot = function(model){
         setMesh(mesh){
             this.mesh = mesh
             this.add(this.mesh);  
-            this.mesh.renderOrder = 3  
+             
             this.changeMaterial(this.material_) //re applyTo every mesh
             
             this.mesh.traverse((mesh)=>{
                 mesh.type = "hotSprite"    //raycaster use
+                mesh.renderOrder = 3  
             })
             
             if(!this.mesh.boxHelper){ 

+ 63 - 68
scene/public/static/js/main_2020_show.js

@@ -2,7 +2,7 @@
 另外 	所有"matter"字样已被我删除				原因:删除matterport信息
   */
 
-let highMapAddColor =  false
+let highMapAddColor = 0//true
 let momentTourBlackNewType = false
 
 !function() {
@@ -18167,15 +18167,14 @@ window.Modernizr = function(n, e, t) {
                             for (var j = 0; j < 8; j++) {
                                 var tile = new THREE.Mesh(geo, new THREE.MeshBasicMaterial({ side: 2 }))
                                 tile.position.set(i - 3.5, j - 3.5, -4)
-
+        
                                 if (highMapAddColor) {
-                                    tile.material.opacity = 0.4
-                                    tile.material.transparent = true
-                                    tile.material.depthTest = tile.material.depthWrite = false //防止chunk比cube近从而被遮
+                                    tile.material.opacity = 0.4  
                                     var colorHue = Math.random()
                                     tile.material.color = new THREE.Color().setHSL(colorHue, 0.6, 0.9)
                                 }
-
+                                tile.material.transparent = true
+                                tile.material.depthTest = tile.material.depthWrite = false //防止chunk比cube近从而被遮
                                 tile.visible = false
                                 tile.tileX = i
                                 tile.tileY = j
@@ -18298,7 +18297,7 @@ window.Modernizr = function(n, e, t) {
                 let needRecover = this.highMapCube.visibleTiles.filter(e => !e.material.map)
 
                 if (needRecover.length) {
-                    let maxCount = 2//common.getBestCount({ name: '4kmaxTileRecover', minCount: 0, maxCount: 2, durBound1: 1.5, durBound2: 6, ifLog: false, maxHistory: 2 })
+                    let maxCount = 1//common.getBestCount({ name: '4kmaxTileRecover', minCount: 0, maxCount: 2, durBound1: 1.5, durBound2: 6, ifLog: false, maxHistory: 2 })
                     let count = 0
                     needRecover.forEach((e, i) => {
                         //只更新若干个,因为太耗时了, 其余的等下帧更新
@@ -18308,39 +18307,15 @@ window.Modernizr = function(n, e, t) {
                     })
                 }
 
-                /*if(recoverList.length == 0)this.highMapCube.restNeedRecover = []
-                else{
-                    let maxCount = common.getBestCount({name:'4kmaxTileRecover', minCount : 0, maxCount : 2, durBound1 : 1.5, durBound2 : 6, ifLog:false, maxHistory:2 } )
-                     let count = 0,index = -1
-                    recoverList.forEach((e,i)=>{ //只更新若干个,因为太耗时了
-                        if(count>=maxCount)return
-                        let r = this.recoverTile(e)  
-                        if(r) count ++
-                        index = i
-                    })
-                    this.highMapCube.restNeedRecover = recoverList.slice(index+1) //其余的等下帧更新 
-                    
-                    
-                }*/
-                /* performance.mark('updateTiles-end')
-                let measure = performance.measure('updateTiles', 'updateTiles-start', 'updateTiles-end')
-                console.log('updateTiles', measure.duration.toFixed(3)) */
+                 
             }
                      
             
-            /* n.prototype.updateHighMap = function(tex, cubeFace, tileX, tileY) {
-                //console.log('updateHighMap')
-                var tile = this.highMapCube.children[cubeFace].children[tileX * 8 + tileY]
-                tile.material.map = tex
-                if (highMapAddColor) {
-                    tile.material.opacity = 1
-                    tile.material.transparent = false
-                }
-                tile.visible = true
-                tile.material.needsUpdate = true //发现每次开始放大但还未放大到4k时也会把之前加载过的4k加载
-            } */
-            
-            
+            n.prototype.getHighImage = function(image, cubeFace, tileX, tileY){
+                this.gotSomeHighImg = true; //标记,需要马上updateTiles
+                let tile = this.highMapCube.children[cubeFace].children[tileX * 8 + tileY]
+                tile.image = image //先记录下来 
+            }
             
             
             
@@ -18355,24 +18330,24 @@ window.Modernizr = function(n, e, t) {
                 }
 
                 //简易创建贴图
-                /* var tex = this.$app.core.get('SceneRenderer').initSizedTexture2D(512, THREE.ClampToEdgeWrapping)
+                var tex = player.sceneRenderer.initSizedTexture2D(512, THREE.ClampToEdgeWrapping)
                 //var loaded = this.$app.core.get('Player').model.isHighMapLoaded(tile.cubeFace, tile.tileX, tile.tileY)
-                this.$app.core.get('SceneRenderer').uploadTexture2D(image, tex, 0, 0, 512, 512) //只替换tex对应的img,不新建
-                 */
+                player.sceneRenderer.uploadTexture2D(image, tex, 0, 0, 512, 512) //只替换tex对应的img,不新建
+                 
 
-                var tex = new THREE.Texture()
+                /* var tex = new THREE.Texture()
                 tex.image = image
                 tex.flipY = false
                 tex.wrapS = tex.wrapT = THREE.ClampToEdgeWrapping
                 tex.generateMipmaps = false
                 tex.minFilter = THREE.LinearFilter
-                tex.needsUpdate = true
+                tex.needsUpdate = true */
 
                 tile.material.map = tex
 
                 if (highMapAddColor) {
                     tile.material.opacity = 1
-                    tile.material.transparent = false
+                    //tile.material.transparent = false
                 }
                 tile.visible = true
                 tile.material.needsUpdate = true //发现每次开始放大但还未放大到4k时也会把之前加载过的4k加载
@@ -18397,26 +18372,23 @@ window.Modernizr = function(n, e, t) {
 
                 let map = tile.material.map
                 if (map) {
-                    map.dispose() //这句其实无效。本来可以使用three自带的deallocateTexture(texture),但因为创建的方式不是普通的new Texture,所以并没有onTextureDispose的侦听,故要自己写
+                    /* map.dispose()   
                     map.loaded = !1
-                    map.version = 0
-
-                    //这两句才是真正释放贴图资源的 ,类似app.sceneRenderer.deallocateCubeTexture(tile.material.map)
-                    var h = player.sceneRenderer.renderer.properties.get(map)
+                    map.version = 0 */
+ 
+                    var h = player.sceneRenderer.renderer.properties.get(map) 
                     player.sceneRenderer.renderer.getContext().deleteTexture(h.__webglTexture)
 
                     tile.material.map = null
 
                     if (highMapAddColor) {
-                        tile.material.opacity = 0.4
-                        tile.material.transparent = true
-                    }
-
+                        tile.material.opacity = 0.4 
+                    } 
                     tile.material.needsUpdate = true
                     tile.visible = false
 
                     //this.highMapCube.texLoadedCount --
-                    //console.log('resetTile'/* , tile.cubeFace, tile.tileX, tile.tileY */)
+                    //console.log('resetTile'  , tile.cubeFace, tile.tileX, tile.tileY  )
                 }
             }
 
@@ -19409,7 +19381,13 @@ window.Modernizr = function(n, e, t) {
             n.prototype.setZoomed = function(e) {
                 this.zoomed = e,
                 this.updateSkyboxForZoomLevel()
-                e ? this.model.showHighMap() : this.model.hideHighMap() //add
+                if(e){ //add
+                    if(player.qualityManager.getNavZoomClass() != '1k' ){
+                        this.model.showHighMap()
+                    }
+                }else{
+                    this.model.hideHighMap()
+                }           
             }
             ,
             n.prototype.ensureSkyboxReadyForRender = function() {
@@ -24280,7 +24258,7 @@ window.Modernizr = function(n, e, t) {
                 if (!this.panoRenderer.zoomPanoRenderingDisabled && this.mode === u.PANORAMA && this.currentPano) {
                     let navTileClass = this.qualityManager.getNavZoomClass() 
                     let tileClass = this.qualityManager.getMaxZoomClass()
-                    let levelThreshold1 = navTileClass == '1k' ? 1.3 : 1.8 , levelThreshold2 = 2 //levelThreshold2不能比zoom.max大也就是不能超过2,否则zoom.max将无法提升到3
+                    let levelThreshold1 = navTileClass == '1k' ? 1.1 : 1.5 , levelThreshold2 = 1.7 //levelThreshold2不能比zoom.max大也就是不能超过2,否则zoom.max将无法提升到3
                
                     var t = this.zoomLevel > levelThreshold1
                         , i = this.flying && this.nextPano && this.nextPano !== this.currentPano
@@ -24322,7 +24300,12 @@ window.Modernizr = function(n, e, t) {
                         var change = (zoomedFlag)=>{ 
                             this.qualityManager.updateMaximums()//更新maxZoomPanoSize
                             this.panoRenderer.setupZoomRenderTarget() //更新renderTarget  
-                            //this.currentPano.setZoomed(t);//更新uniforms贴图 
+                            if(this.qualityManager.zoomLevelResolution == '4k'){
+                                this.model.showHighMap()
+                            }else{
+                                this.model.hideHighMap()
+                            } 
+                        
                         }
                         this.qualityManager.zoomLevelResolution = this.zoomLevel >= levelThreshold2 ? '4k' : this.zoomLevel > levelThreshold1? '2k' : '1k'
                         
@@ -28036,6 +28019,10 @@ window.Modernizr = function(n, e, t) {
             var e = {}
               , t = (new h.Vector4,
             d.tiling.overlayStyle);
+
+            //var failHistory = {};
+
+
             return function(i, n) {
                 var r = i.panoId
                   , o = i.image
@@ -28056,6 +28043,7 @@ window.Modernizr = function(n, e, t) {
                   , y = v.size;
                 if (this.isPanoZoomed(r) && (A = this.zoomRenderTarget,
                 y = A.width),    //this.qualityManager.getMaxZoomPanoSize()),
+                
                 this.isRenderTargetDescriptorValid(v) || (p = !1,
                 g = !1),
                 n || (this.anyUploaded(i.node) && (p = !1,
@@ -28063,26 +28051,29 @@ window.Modernizr = function(n, e, t) {
                 this.isTileUploaded(i) && (p = !1,
                 g = !1)),
                 p) {
+
+                    /* if(failHistory[''+r+s+l]){
+                        console.log('uploadTile retry', r, s, l)
+                    }
+
+                    console.log('uploadTile  成功', r, s, l)
+                     */
+                    
                     var C = u * a
                       , I = d * a
                       , E = a / s * y
                       , b = C / s * y
                       , w = I / s * y;
-                    e[a] || (e[a] = this.sceneRenderer.initSizedTexture2D(a, h.ClampToEdgeWrapping));
-                    //var _ = e[a];
-                    if(s > this.qualityManager.maxRenderTargetSize ){ //4096 改
-                        var _ = this.sceneRenderer.initSizedTexture2D(a, THREE.ClampToEdgeWrapping);
-                        //var loaded = player.model.isHighMapLoaded(i.cubeFace, u,d)                 
-                    }else{ 
-                        var _ = e[a]
-                    } 
-                     
-                    this.sceneRenderer.uploadTexture2D(o, _, 0, 0, a, a) 
+                   
                     if (s > this.qualityManager.maxRenderTargetSize) {
                           
-                        /* loaded || */ player.model.updateHighMap(o, i.cubeFace, u, d)
+                       player.model.getHighImage(o, i.cubeFace, u, d)
                         
                     }else{ 
+                        e[a] || (e[a] = this.sceneRenderer.initSizedTexture2D(a, h.ClampToEdgeWrapping));
+                        var _ = e[a]
+                        this.sceneRenderer.uploadTexture2D(o, _, 0, 0, a, a) 
+                    
                         if ( 1 === t || 2 === t) {
                             var T = 1 === t ? this.overlayTilesBasic : this.overlayTilesEnhanced;
                             this.sceneRenderer.renderToCubeMap(_, A, a, a, 0, 0, a, a, b, w, E, E, i.cubeFace),
@@ -28095,8 +28086,12 @@ window.Modernizr = function(n, e, t) {
                     m.uploadCount === c && this.emit(f.PanoRenderComplete, r, s, c),
                     this.setUploaded(i, !0),
                     this.addCoverageForNode(i.node)
-                } else
+                } else{
                     this.setUploaded(i, !1);
+                    //console.log('uploadTile  失败', r, s, l)
+                    //failHistory[''+r+s+l] = true;
+
+                }
                 return i.uploadAttempted || (m.uploadAttempts++,
                 this.emit(f.TileUploadAttempted, r, s, l, c)),
                 i.uploadAttempted = !0,