| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- import * as THREE from "../../../../../libs/three.js/build/three.module.js";
-
- import browser from '../../../utils/browser.js'
- import {settings,config} from '../../../settings.js'
-
- let {ModelManagerEvents,PanoSizeClass} = Potree.defines
- export default class QualityManager {
- constructor(e, t, i) {
-
- this.maxNavPanoSize = -1;
- this.maxZoomPanoSize = -1;
- this.devicePixelDensity = e;
- this.deviceScreenSize = t;
- this.clientBandwidth = i;
- this.panoSizeClassMap = {};
- this.useHighResolutionPanos = !0; //是否能够使用2k及以上图
- this.useUltraHighResolutionPanos = !1;
- this.modelHasUltraHighPanos = !1;
- this.qualityManager = this;
-
- //this.init()
- viewer.addEventListener('allLoaded',this.init.bind(this),{importance:10})
-
- }
- init(e ) {
- //var metadata = store.getters['scene/metadata'] ;//有时候请求不到
- //if(metadata.sceneSource == 11 || metadata.sceneScheme == 12){
- /* if(config.tileClass == '1k'){
- this.useHighResolutionPanos = false //xzw add 只加载1k
- } */
- /* let resolution = '6k'
- if (resolution.indexOf('/') != -1) {
- resolution = resolution.split('/')[1]
- }
- Potree.settings.tileClass = parseInt(resolution) * 1024 */
- let maxTileClass = 0
- viewer.scene.pointclouds.forEach(e=>{
- maxTileClass = Math.max(maxTileClass, e.tileClass)
- })
- Potree.settings.tileClass = maxTileClass
- this.maxRenderTargetSize = browser.isMobile() ? 2048 : maxTileClass
- this.maxRenderTargetSize = Math.min( viewer.renderer.capabilities.maxCubemapSize, this.maxRenderTargetSize)//部分系统老浏览器只能2048
-
- this.buildPanoSizeClassMap(this.devicePixelDensity, this.deviceScreenSize, this.clientBandwidth);
- this.ultraHighSize = this.getPanoSize(PanoSizeClass.ULTRAHIGH);
- this.highSize = this.getPanoSize(PanoSizeClass.HIGH);
- this.standardSize = this.getPanoSize(PanoSizeClass.STANDARD);
- this.baseSize = this.getPanoSize(PanoSizeClass.BASE);
- config.tiling.maxZoomPanoQuality && this.ultraHighSize <= config.tiling.maxZoomPanoQuality && (config.tiling.allowUltraHighResolution = !0);
- this.highQualityThreshold = browser.valueFromHash("threshold2k", config.windowHeightHighQualityThreshold);
- this.updateMaximums();
- //e.on(ModelManagerEvents.ActiveModelChanged, this.onModelChanged.bind(this));
- }
- updateFromModel(e) {
- //this.updateHighResolutionSettings(e)
- this.updateUltraHighResolutionSettings(e)
- }
- /* updateHighResolutionSettings(e) {
- this.useHighResolutionPanos = !0
- this.updateMaximums()
- } */
- updateUltraHighResolutionSettings(e) {
- if (config.tiling.allowUltraHighResolution && this.modelHasUltraHighPanos) {
- this.useUltraHighResolutionPanos = !0;
- } else {
- this.useUltraHighResolutionPanos = !1;
- }
- this.updateMaximums();
- }
- enableUltraHighQualityMode() {
- this.modelHasUltraHighPanos = !0;
- this.updateUltraHighResolutionSettings(null);
- }
- ultraHighQualityModeEnabled() {
- return this.modelHasUltraHighPanos
- }
- onModelChanged(e) {
- this.updateFromModel(e.model),
- this.updateMaximums()
- }
- updateMaximums() {
- this.maxNavPanoSize = config.tiling.maxNavPanoQuality || this.detectMaxNavPanoSize(),
- this.maxZoomPanoSize = config.tiling.maxZoomPanoQuality || this.detectMaxZoomPanoSize(),
- this.maxZoomPanoSize < this.maxNavPanoSize && (this.maxNavPanoSize = this.maxZoomPanoSize)
- }
- buildPanoSizeClassMap() {
- this.panoSizeClassMap[PanoSizeClass.BASE] = 512,
- this.panoSizeClassMap[PanoSizeClass.STANDARD] = 1024,
- this.panoSizeClassMap[PanoSizeClass.HIGH] = 2048,
- this.panoSizeClassMap[PanoSizeClass.ULTRAHIGH] = Math.max(4096, Potree.settings.tileClass)
- }
- getPanoSize(e) {
- return this.panoSizeClassMap[e]
- }
- getMaxPossiblePanoSize() {
- return this.getPanoSize(PanoSizeClass.ULTRAHIGH)
- }
- getMaxPanoSize() {
- return this.maxZoomPanoSize
- }
- getMaxNavPanoSize() {
- return this.maxNavPanoSize
- }
- getMaxZoomPanoSize() {
- return this.maxZoomPanoSize
- }
- detectMaxNavPanoSizeClass() {
- //return this.useHighResolutionPanos ? browser.isMobile() ? PanoSizeClass.STANDARD : window.innerHeight < this.highQualityThreshold ? PanoSizeClass.STANDARD : PanoSizeClass.HIGH : PanoSizeClass.STANDARD
- /* if(config.name == 'decor'){
- return PanoSizeClass.STANDARD
- }
- return PanoSizeClass.HIGH */
- switch(Potree.settings.navTileClass){
- case 1024:
- return PanoSizeClass.STANDARD;
- break;
- case 2048:
- default:
- return PanoSizeClass.HIGH;
- }
-
-
- }
- detectMaxNavPanoSize() {
- var e = this.detectMaxNavPanoSizeClass();
- return this.getPanoSize(e)
- }
- detectMaxZoomPanoSize() { //获取当前zoomRenderTarget应下载的最高级别
-
- //若是有三个级别,每次只需要加载到当前的zoomLevel;而两级时因为有zoomed来判断是使用基本贴图还是zoomRenderTarget,所以只需要返回最大的即可
-
- if(this.zoomLevelResolution){//有三个级别
- if(this.zoomLevelResolution == '4k' && this.useUltraHighResolutionPanos){
- return this.getPanoSize(PanoSizeClass.ULTRAHIGH);
- }else if(this.zoomLevelResolution == '1k' || !this.useHighResolutionPanos){
- return this.getPanoSize(PanoSizeClass.STANDARD);
- }else{
- return this.getPanoSize(PanoSizeClass.HIGH);
- }
- }else{
- if (this.useHighResolutionPanos) {
- /* if (browser.isMobile()) {//手机版如果要2k的将这里去掉
- if (settings.tiling.mobileHighQualityOverride) {
- return this.getPanoSize(PanoSizeClass.HIGH);
- } else {
- return this.getPanoSize(PanoSizeClass.STANDARD);
- }
- } else */if (this.useUltraHighResolutionPanos ) {
- return this.getPanoSize(PanoSizeClass.ULTRAHIGH);
- } else {
- return this.getPanoSize(PanoSizeClass.HIGH);
- }
- } else {
- return this.getPanoSize(PanoSizeClass.STANDARD);
- }
-
-
- }
-
- }
-
-
-
-
-
- }
|