123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 |
- //xzw add
- import browser from './utils/browser.js'
- const labelorder = 5
-
- const config = {//配置参数 不可修改
- displayMode:{
- showPointCloud:{
- atPano:{
- showPoint : true,
- showSkybox: false,
- pointUsePanoTex : false
-
- },
- transition:{
- showPoint: true,
- showSkybox: false,
- pointUsePanoTex: false
- },
- canLeavePano: true //是否能离开pano位置
- },
- showPanos:{
- atPano:{
- showPoint : false,
- showSkybox: true,
- pointUsePanoTex : false
- },
- transition:{
- //showPoint: true,
- showSkybox: true,
- //pointUsePanoTex: true //是否使用全景贴图
- },
- canLeavePano: false
- },
-
- showBoth:{
- atPano:{
- showPoint : true,
- showSkybox: true,
- pointUsePanoTex : false //?
- },
- transition:{
- showPoint: true,
- showSkybox: true,
- pointUsePanoTex: true
- },
- canLeavePano: true //是否能离开pano位置 离开后自动变为showPointCloud
- },
- //test:
- pointUsePanoTex:{ //---静止时调点云
- atPano:{
- showPoint : true,
- showSkybox: false,
- pointUsePanoTex : true
- },
- transition:{
- showPoint: true,
- showSkybox: true,
- pointUsePanoTex: true //是否使用全景贴图
- },
- canLeavePano: false
- },
- },
-
-
-
- urls:{
- //prefix: //当前网站域名
- prefix1: 'https://laser-oss.4dkankan.com',//点云oss
- prefix2: 'https://testlaser.4dkankan.com',
- prefix3: 'https://4dkk.4dage.com',//全景图oss
- prefix4: 'https://uat-laser.4dkankan.com', //测试服 线上当前网站接口域名
- prefix5: 'https://laser.4dkankan.com/backend',//正式服 线上当前网站接口域名
- prefix6: 'https://mix3d.4dkankan.com/backend', //融合
- prefix7: 'https://xfhd.4dkankan.com/backend', //融合
- handlePrefix: (prefix)=>{//去掉最后一个/, 否则国外的一些服务器不能访问 //
- if(prefix.slice(-1) == '/') {
- prefix = prefix.slice(0,prefix.length-1)
- }
- return prefix
- },
- getName(num){
- let name
- if(num === 1){
- name = 'laserOSSRoot'
- }else if(num === 3){
- name = 'panoOSSRoot'
- }else if(num === 8){
- name = 'panoRoot'
- }
- return name
- },
- setPrefix(num, url ){ //本地版融合有经过次设置
- this['prefix'+num] = url
- this[this.getName(num)] = url;
- },
- getPrefix(num, object){
- let prefix, name = this.getName(num)
-
- let getFromModel = ()=>{
- let prop = (object.props || object)?.raw
- return prop && prop[name]
- }
- prefix = this[name] || getFromModel() || this['prefix'+num]
- return prefix
- },
- templates : {
-
- }
- },
-
- transitionsTime:{
- flyMinTime : 650 , // 毫秒/米
- flytimeDistanceMultiplier: 120 ,
-
- }
-
-
- ,
- view:{
- fov:70, //navvis:50
- near:0.05 , // too small will result in z-fighting
- far: 10000,
- },
-
- map:{//mapViewer
- mapHeight : -1000,//要比点云低。最低
- cameraHeight : 1000, //最高 ,注意(如sitemodel)其他的物体不能超过这个高度
- },
- minNodeSize:30, // perspectiveCamera允许加载的node的最小可见像素宽度。越大越省性能
- tiles3DMaxMemory: 200,//M. 最大支持3dTiles的内存大小 超出会崩溃。 改太小太大都会卡,太大崩溃
- //崩溃历史: 200罗敏电脑崩
- pointDensity:{
- magnifier:{
- maxLevelPercent: 1,
- pointBudget : 1*1000*1000, //至少显示这么多
- minNodeSize : 5, //pick时调高精度
- },
- panorama:{//显示全景时的漫游。因为点只能显示1个像素的大小,所以必须很密集,但又要限制点的数量
- maxLevelPercent: 0.6,
- pointBudget : /* 4*1000*1000// */browser.isMobile() ? 0.2*1000*1000 : 0.4*1000*1000, //点云总最大数
- minNodeSize : 100,
- },
-
- fourViewports:{//分四屏时防止卡顿
- maxLevelPercent: 0.9,
- pointBudget :3*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
- minNodeSize : 70,
- },
- fourViewportsMain:{//分四屏时防止卡顿
- maxLevelPercent: 0.9,
- pointBudget :3*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
- minNodeSize : 70,
- }
- ,
- panoEdit:{
- maxLevelPercent: 1, //在远处时由于pointBudget限制而展示稀疏,凑近时就变为最高质量了
- pointBudget :4*1000*1000, //要使点云达到200个以上时还不卡
- percentByUser:true,
- minNodeSize : 80 , //点云多的话远处的尽量就不可见吧
- },
- low:{//highPerformance
- maxLevelPercent: 0.4, //最小为0
- percentByUser:true, //如果用户定义了percent,使用用户的
- pointBudget : browser.isMobile() ? 1*1000*1000 : 2*1000*1000,
- minNodeSize : 40 / window.devicePixelRatio ,
- },
- middle:{//balanced //不同场景相同级别所产生的numVisibleNodes和numVisiblePoints不同,如果分层比较细,可能要到level8才能看清,那么level5看到的点就很大且很少,如隧道t-e2Kb2iU
- maxLevelPercent: 0.7,
- percentByUser:true,
- pointBudget: browser.isMobile() ? 1.5*1000*1000 : 3.5*1000*1000,
- minNodeSize : 30 / window.devicePixelRatio ,
- },
- high:{//highQuality
- maxLevelPercent: 1,
- percentByUser:true,
- pointBudget:browser.isMobile() ? 3*1000*1000 : 6*1000*1000, //原本最高是8,但是大部分电脑都太卡了,降
- minNodeSize : 20 / window.devicePixelRatio , //手机上因为像素点小,远一点的时候更需要加载密集的点云。(没事,有pointBudget限制着,会先从近处加载高级node,再远就不加载了)
- },
- screenshot:{
- maxLevelPercent: 1,
- pointBudget: browser.isMobile() ? 4*1000*1000 : 10*1000*1000, //一般只有电脑需要截图,手机的加载多会崩
- minNodeSize : 40 / window.devicePixelRatio ,
- },
- screenshot2:{
- maxLevelPercent: 1,
- pointBudget: browser.isMobile() ? 8*1000*1000 : 15*1000*1000,
- minNodeSize : 20 / window.devicePixelRatio ,
- },
- ultraHigh:{
- maxLevelPercent: 1,
- pointBudget: 20*1000*1000,
- minNodeSize : 10 / window.devicePixelRatio,
- }
-
- //数值由testLevelSteps得来,其中nodeMaxLevel为2时,low和middle的都是1,如果真有这么低的点云就单独处理下。
- //多个viewport尽量保证pointBudget一样,或者pointBudget不能太低于所需,否则会反复加载了又清除
- },
-
-
-
- clip:{
- color: '#FFC266', //map
-
- },
-
-
- measure:{
- color:'#00C8AF',
- default:{
- color:"#64C8BB",//"#00c7b2",
- opacity:0.7
- },
- highlight:{
- color:'#00C8AF',//"#00c7b2",
- opacity:1,
- labelOpacity:0.7//1会挡住线和端点
- },
- guide:{
- color:'#FFFFFF',
- opacity:0.8
- }
- ,
- backColor:'#333333',
-
- lineWidth: 3,
-
- textColor: "#000000", //"#FFFFFF"
-
- mulLabelHideFaraway : false ,// 多折线根据远近显示label
-
- adsorptMinDis : 30, //最小吸附距离(像素)
-
- showName:true
- },
- material:{//初始化
- pointSize: 0.1,
- realPointSize : 0.1,//实际上的ui滑动条默认大小(兼容旧的版本)
- minSize: 0.1,
- maxSize: 10000,
- pointSizeType: 'ATTENUATED', //'ADAPTIVE'//'ADAPTIVE' \ FIXED //ADAPTIVE的在小房间里大小会不太匹配,但在远景似乎更好
- /*
- ATTENUATED : 衰减 真实大小,靠近时感觉是点云一点点变多,缝隙变小
- ADAPTIVE: 自适应 大小根据level变化,越高越小。靠近时感觉点云由大慢慢细分成小份。这个感觉更佳但是navvis为何不用这个
- */
-
- absolutePanoramaSize: 1.3 ,//全景漫游时的size 是fixed的模式
-
- //sizeAtPanoRtEDL : 2000,
- pointColor:'#ffffff',
-
-
- //sizeAddAtPanoRtEDL : 0.5, //全景模式静止时的size
- //ADAPTIVE : 字会失真扭曲
- //'ATTENUATED' 往旁边看有缝隙、点在浮动
- }
- ,
- skyboxBgWidth : 100 ,
-
- renderLayers:{//渲染层,方便分批渲染管理,替代scene的创建。数字不代表顺序。(数字不能太大)
- bg: 20,
- bg2: 21,
-
- skybox: 1,
- pointcloud: 11,
- sceneObjects:0,//default
- model : 2,
- light: 15,
- //measure:4,
- //tags:5,
- magnifier:6,
- magnifierContent:16,
- volume:7,
- transformationTool:8,
-
- map:9,
- mapObjects:10,//default
-
-
- bothMapAndScene: 3,
-
- onlyMapVisi:12,//只能mapViewer可见
- mapUnvisi:13,//只有mapViewer不可见
- sideVisi:14,//只有侧面可见
-
-
- layer1: 18,// 备用1
- layer2: 17,// 备用2
- },
-
- renderOrders:{ //会影响到绘制、pick时的顺序。
- line: 3,
- reticule:5,
- measureMarker: 6,
- measureLabelSub: 7,
- measureLabel: 8,
- sorptionSign:10,
- model:10,
-
-
- path: {
- label: labelorder,
- edge: labelorder,
- line: labelorder , //会被edge遮住一些,不过无碍
- marker: labelorder+1, //cover edge
- },
-
- tag:{
- label: labelorder,
- spot: labelorder,
- line: labelorder-1,
- onMesh:{
- line: labelorder,
- spot: labelorder-1,
- }
- },
-
- magnifier:50,
-
- /*
- renderOrder:
- 理想情况是大家渲染层级都一样,用真实的遮挡情况。(depthTest为false的话会three会自动根据深度调整渲染顺序, 只是随着角度变化常有错) 但有时候为了处理特殊情况,如希望热点的线永在热点之后不穿出,需要增加层级。但热点和热点之间、热点和其他物品是平等的,而降低的层级总被远处的高层级遮挡。
- 因此无论何时尽量减少层级数目。如有必要,可临时将容易被忽视穿帮的线条设置为低层级。
- */
- },
-
- siteModel:{
- names:{
- 'building': '建筑',
- 'floor':'楼层',
- 'room':'房间'
- },
- floorHeightDefault: 5,//一层楼的高度
-
-
- },
-
- panosEdit:{
-
- },
-
- tiling: {
- panoPreRenderRepeatDelay: 2500,
- panoPreRenderDelay: 500,
- preRenderTourPanos: browser.valueFromHash("tileprerender", 0),
- tilingFlagNames: ["usetiles", "tiles"],
- maxNavPanoQuality: browser.valueFromHash("maxtileq", null),
- maxZoomPanoQuality: browser.valueFromHash("maxztileq", null),
- overlayStyle: browser.valueFromHash("tileoverlay", 0),
- uploadIntervalDelay: browser.valueFromHash("tileupdelay", 10 ),
- initialIntervalDelay: browser.valueFromHash("itiledelay", 0),
- maxNonBaseUploadsPerFrame: browser.valueFromHash("maxnbtpf", 1),
- maxBaseUploadsPerFrame: browser.valueFromHash("maxbtpf",6),
- customCompression: browser.valueFromHash("tilecustcomp", 0),
- mobileHighQualityOverride: !1,
- allowUltraHighResolution: !0
- },
- navigation: {
- panoScores: !1,
- mouseDirection: !0,
- filterStrictness: .75,
- angleFactor: -30,
- directionFactor: 10,
- distanceFactor: -1,
- optionalityFactor: 3
- }
- ,
- axis : { 'x':{color:'#ea3f3f'/* '#d0021b' */ /* 'red' */}, 'y':{ color:'#86c215' /* '#86c542' *//* 'green' */}, 'z': {color:'#3396f8'/* '#3399c8' */ /* 'blue' */}, 'xyz':{color:'#ccc',}},
-
- shelterMargin:0.15, //多少米内不算遮挡 (有的场景深度图不准,和点云差别蛮大如SG-t-24F0iT3pKAO)
- highQualityMaxZoom: 2,
- ultraHighQualityMaxZoom: 3,
- panoFieldRadius : 10, //当前位置多远范围内可以切全景模式
- clickMaxDragDis:3,
- clickMaxPressTime:200, //ms
- doubleClickTime:300,//双击间隔时间
- testNodeCount1: browser.isMobile() ? 6 : 4, //testMaxNode次数达到这个数字时,changePointSize才使用nodeMaxLevel。 (调试时比较卡,在线上实际只需要3)
-
- background: '#232323',
- mapBG:/* '#232323', */ '#F5F5F5', //地图的clearColor
- pickFrontPointRatio:50,
- colors: { //from navvis
- red: [213,0,0],
- pink: [197,17,98],
- purple: [170,0,255],
- "deep purple": [98,0,234],
- blue: [ 41,98,255],
- "light blue": [ 0,145,234],
- cyan: [ 0,184,212],
- teal: [ 0,191,165],
- green: [0,200,83],
- "light green": [ 100,221,23],
- lime: [ 174,234,0],
- yellow: [ 255,214,0],
- amber: [ 255,171,0],
- orange: [ 255,109,0],
- "deep orange": [ 255,61,0],
-
- },
- maxLRUPoints:40e6,
- depthTexUVyLimit: 0.141, // 在这个范围内是没有深度的,从图片算的0.14003, 设置为稍大于这个数值
-
- maxSplatCount: 2000000, //整个网页最大支持显示多少个
-
- //neighbourPath:'data/1111/extraNeighbours.js' //本地版手动额外配置,权重最高
- }
-
- config.OrthoCameraLimit = {
- standard:{
- zoom:{min:0.0004, max:500}, //如果camera缩太小,地图会因为数字边界问题而扭曲
- latPad:20,
- xBound:[-4e6, 4e6],
- },
- expand:{
- zoom:{min:0.0004, max:500}, //如果camera缩太小,地图会因为数字边界问题而扭曲
- latPad:20,
- xBound:[-6e6, 6e6],
- },
- }
- /* 显示模式:
- 1只显示点云: 滚轮为前进后退,方向键可以行走。进入漫游点时自动变为混合(这样全景可以弥补缝隙),过渡时只显示点云。
- 2只显示全景: 不能任意行走。 过渡时显示贴图材质非edl的点云(否则有折痕不贴合)。
- 3混合:都显示。 不能任意行走。过渡时显示贴图材质非edl的点云(因为只显示点云的话不太美,点云很碎,不细腻)
- */
- window.testLevelSteps = function(steps){//[0.4,0.7,1]
- if(!steps){
- let s = Potree.config.pointDensity;
- steps = [s.low.maxLevelPercent, s.middle.maxLevelPercent, s.high.maxLevelPercent, ]
- }
- let max = 1
- while(++max<=12){
- let r1 = steps.map(e=>e * max);
- let r2 = steps.map(e=>Math.round(e * max));
- console.log(`当nodeMaxLevel为${max}时,每一级的level分别为${r2}, (小数:${r1})`)
- }
- console.log('请检查每一层的三个level是否有重复')
-
- }
- function getPrefix(){
- let u = window.location.href.split('//')
- let v = u[1].split('/');
- return v[0]
- }
- let isTest = browser.urlHasValue('test')
- let settings = {//设置 可修改
- editType : '',
- number: '', //场景序号
- originDatasetId:'',//场景原本的数据集id,应该就是数据集第一个吧
- isOfficial:false,
- webSite:'testdata',//正式:'datav1', //不同环境对应的静态文件的地址不同
- // language : "zh"
- isLocal:false, //是否本地 局域网版本
- libsUrl:'../libs/',
- displayMode:'',
- isTest ,
- prefix: getPrefix(),
- maxLRUPoints: config.maxLRUPoints,
- pointDensity: '', UserPointDensity:'',//pointDensity会随着进入不同的模块而自动改变,UserPointDensity记录了用户的设置
- UserDensityPercent:null,//点云密度百分比
- ifShowMarker:true,//显示漫游点
- floorplanType:{},//平面图类型 'default' | 'diy' 不同数据集不同{datasetId:...}
- floorplanEnable:false,
- floorplanEnables:{},
- floorplanRequests:{},//开始加载了的
-
- mapEnable:true,//地图区域是否加载地图
- cameraFar : config.view.far, //相机最远范围 1-300
- //limitFar: true, //是否使用setting的cameraFar来限制(如在点云裁剪时为false)
- showPanoMesh:false, //显示小球,
- dblToFocusPoint:false,//调试时如果需要双击飞向某个点云的点,就打开。此时不在漫游点的话单击将无法漫游。//因和单击漫游冲突
-
- unableNavigate : false,//进入如裁剪界面时 禁止漫游
- sizeFitToLevel: false,//当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2
- zoom:{
- enabled : true,
- min:1,
- max: config.highQualityMaxZoom
-
- },
- navConstantly:true,
- navTileClass: /* browser.isMobile() ? '1k' : */ '2k', //默认加载到
- tileClass:'4k', //最高可达
- /* loadTilesWhenUnfocus:false, //页面unfocus时也仍在加载tiles
- loadPointsWhenUnfocus:true, //页面unfocus时也仍在加载点云 */
-
- //initialShowPano:true
- drawEntityData: false, //包括marker、线
-
- zoomFromPointert:{//定点缩放(包括点云模式、全景模式、地图)
- whenPanos:true,
- whenPointCloud:true,
- map:true,
- },
- rotAroundPoint:true,//点云模式是否能绕intersectPoint旋转
- tourTestCameraMove:false, //测试镜头时,不移动真实的镜头, 只移动frustum
- cameraAniSmoothRatio : 20, //镜头动画平滑系数,越高越平滑
- urls : $.extend({}, config.urls, {
- prefix : config.urls.prefix4 //主要使用的 是测试环境,根据不同工程更改
- }),
-
-
- useDepthTex: true,//使用深度贴图,但不代表一定有(得到的intersect更快速准确和稳定) SS-t-7DUfWAUZ3V
- //matUseDepth:false,
- //panoEdit:
- datasetsPanos:{},
-
- //mergeModel:
- boundAddObjs:false,
- intersectOnObjs:false,
- intersectWhenHover:true,
- depTexLocBindDataset: true,//是否在pano模式下,使用深度图得到intersect的话,改intersect能属于该pano所在的点云。也就相当于在全景模式下intersect的点属于该全景图
- notAdditiveBlending:false, //点云是否使用普通的blend, 否则会曝光过渡
- precision:2, // 两位小数
- unit: 'm',
-
- useV4url:true, //v4的全景图等路径不一样 scene_view_data
-
- useRTskybox:true, //直接使用rtEDL绘制到屏幕,当是全景模式时. 在降4倍时能给render节省1毫秒,gpu时间未测
- useRTPoint:true, //直接使用rtEDL绘制到屏幕,当是点云模式时。可以大大节省gpu时间。但有锯齿
- pointEnableRT:false,//点云模式时是否绘制到rtEDL。如果不需要遮挡效果就不需绘制
- cloudSameMat:true, //因为点云个数较多,就使用相同的材质,可见降低绘制速度(要保证所有点云的maxNodelevel一样,且要算出 material.spacing的平均值)
-
- showCompass : false,
- showAxis : isTest,
- //testCube : true,
- // moveToCenter:true, //针对数据集间隔很远的场景 dis>5000 容易抖动
- tiles3DMaxMemory: config.tiles3DMaxMemory,
- adsorption:false,//测量时吸附点
- pickFrontPointRatio:config.pickFrontPointRatio, //默认pick点云时选中靠近镜头的点的偏向
- dragPolyBeyondPoint: browser.urlHasValue('dragPolyBeyondPoint'), //ctrlPolygon是否可以拖拽到没点云的地方
- panoZoomByPointer: false,//全景图是否定点缩放
- areaAtNotPlane: false,
- showNeighSetGui: browser.urlHasValue('neighGui'),
- selectShowBox: true,
-
- //fastTran: isTest
- pathSmooth : true,// window.location.href.includes('192.168.0.59') //true //smooth曲线, 非折线
- }
-
- Potree.config = config
- Potree.settings = settings
-
- settings.isLocalhost = settings.prefix.includes('localhost:') || settings.prefix.includes('localhost:')
- settings.isFormal = browser.urlHasValue('formal')//正式环境 本地测试
- if(settings.isFormal){
- settings.urls.prefix = settings.urls.prefix5
- settings.webSite = 'datav1'
- }
-
-
- export {config, settings}
|