settings.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. //xzw add
  2. import browser from './utils/browser.js'
  3. const config = {//配置参数 不可修改
  4. displayMode:{
  5. showPointCloud:{
  6. atPano:{
  7. showPoint : true,
  8. showSkybox: false,
  9. pointUsePanoTex : false
  10. },
  11. transition:{
  12. showPoint: true,
  13. showSkybox: false,
  14. pointUsePanoTex: false
  15. },
  16. canLeavePano: true //是否能离开pano位置
  17. },
  18. showPanos:{
  19. atPano:{
  20. showPoint : false,
  21. showSkybox: true,
  22. pointUsePanoTex : false
  23. },
  24. transition:{
  25. //showPoint: true,
  26. showSkybox: true,
  27. //pointUsePanoTex: true //是否使用全景贴图
  28. },
  29. canLeavePano: false
  30. },
  31. showBoth:{
  32. atPano:{
  33. showPoint : true,
  34. showSkybox: true,
  35. pointUsePanoTex : false //?
  36. },
  37. transition:{
  38. showPoint: true,
  39. showSkybox: true,
  40. pointUsePanoTex: true
  41. },
  42. canLeavePano: true //是否能离开pano位置 离开后自动变为showPointCloud
  43. },
  44. //test:
  45. pointUsePanoTex:{ //---静止时调点云
  46. atPano:{
  47. showPoint : true,
  48. showSkybox: false,
  49. pointUsePanoTex : true
  50. },
  51. transition:{
  52. showPoint: true,
  53. showSkybox: true,
  54. pointUsePanoTex: true //是否使用全景贴图
  55. },
  56. canLeavePano: false
  57. },
  58. },
  59. urls:{
  60. //localTextures:'../resources/textures/',
  61. prefix1: '',//'https://laser-oss.4dkankan.com',//oss
  62. prefix2: '',//'https://testlaser.4dkankan.com',
  63. prefix3: '',//'https://4dkk.4dage.com',
  64. prefix4: '',//'https://uat-laser.4dkankan.com',//test.4dkankan
  65. prefix5: '',//'https://laser.4dkankan.com',
  66. prefix6: '',//'https://mix3d.4dkankan.com/backend',
  67. },
  68. transitionsTime:{
  69. flyMinTime : 300 , // 毫秒/米
  70. flytimeDistanceMultiplier: 130 ,
  71. panoToPanoMax: 1800 ,
  72. flyIn:1000,
  73. flyOut:1000
  74. }
  75. ,
  76. view:{
  77. fov:70, //navvis:50
  78. near:0.1,
  79. far: 10000,
  80. },
  81. map:{//mapViewer
  82. mapHeight : -1000,//要比点云低。最低
  83. cameraHeight : 1000, //最高 ,注意(如sitemodel)其他的物体不能超过这个高度
  84. },
  85. minNodeSize:30, // perspectiveCamera允许加载的node的最小可见像素宽度。越大越省性能
  86. pointDensity:{
  87. magnifier:{
  88. maxLevelPercent: 1,
  89. pointBudget : 8*1000*1000,
  90. },
  91. panorama:{//显示全景时的漫游。因为点只能显示1个像素的大小,所以必须很密集,但又要限制点的数量
  92. maxLevelPercent: 0.6,
  93. pointBudget : /* 4*1000*1000// */browser.isMobile() ? 0.1*1000*1000 : 0.4*1000*1000, //点云总最大数
  94. minNodeSize : 100,
  95. },
  96. fourViewports:{//分四屏时防止卡顿
  97. maxLevelPercent: 0.4,
  98. pointBudget :1*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
  99. minNodeSize : 70,
  100. },
  101. fourViewportsMain:{//分四屏时防止卡顿
  102. maxLevelPercent: 0.8,
  103. pointBudget :1*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
  104. minNodeSize : 70,
  105. }
  106. ,
  107. panoEdit:{
  108. maxLevelPercent: 1, //在远处时由于pointBudget限制而展示稀疏,凑近时就变为最高质量了
  109. pointBudget :6*1000*1000, //比最高的低一点,避免卡顿
  110. percentByUser:true,
  111. minNodeSize : 50 ,
  112. },
  113. low:{//highPerformance
  114. maxLevelPercent: 0.4, //最小为0
  115. percentByUser:true, //如果用户定义了percent,使用用户的
  116. pointBudget : browser.isMobile() ? 1*1000*1000 : 2*1000*1000,
  117. minNodeSize : 50 / window.devicePixelRatio ,
  118. },
  119. middle:{//balanced //不同场景相同级别所产生的numVisibleNodes和numVisiblePoints不同,如果分层比较细,可能要到level8才能看清,那么level5看到的点就很大且很少,如隧道t-e2Kb2iU
  120. maxLevelPercent: 0.7,
  121. percentByUser:true,
  122. pointBudget: browser.isMobile() ? 2.0*1000*1000 : 3.5*1000*1000,
  123. minNodeSize : 40 / window.devicePixelRatio ,
  124. },
  125. high:{//highQuality
  126. maxLevelPercent: 1,
  127. percentByUser:true,
  128. pointBudget:browser.isMobile() ? 4*1000*1000 : 6*1000*1000, //原本最高是8,但是大部分电脑都太卡了,降
  129. minNodeSize : 40 / window.devicePixelRatio , //手机上因为像素点小,远一点的时候更需要加载密集的点云。(没事,有pointBudget限制着,会先从近处加载高级node,再远就不加载了)
  130. },
  131. screenshot:{ //调试:bdvt10002_202309041033308810
  132. maxLevelPercent: 1,
  133. pointBudget: 8*1000*1000,
  134. minNodeSize: 30 / window.devicePixelRatio ,
  135. }
  136. //数值由testLevelSteps得来,其中nodeMaxLevel为2时,low和middle的都是1,如果真有这么低的点云就单独处理下。
  137. //多个viewport尽量保证pointBudget一样,或者pointBudget不能太低于所需,否则会反复加载了又清除
  138. },
  139. clip:{
  140. color: '#FFC266', //map
  141. },
  142. measure:{
  143. color:'#00C8AF',
  144. default:{
  145. color:"#2F8FFF",//"#00c7b2",
  146. opacity:0.85
  147. },
  148. highlight:{
  149. color:"#ff8f28",//"#00c7b2", (255, 143, 40, 1
  150. opacity:1
  151. },
  152. guide:{
  153. color:'#FFFFFF',
  154. opacity:1
  155. }
  156. ,
  157. backColor:'#333333',
  158. lineWidth: 3,
  159. textColor: "#000000", //"#FFFFFF"
  160. adsorptMinDis:40,
  161. },
  162. material:{//初始化
  163. pointSize: 0.1,
  164. realPointSize : 0.1,//实际上的ui滑动条默认大小(兼容旧的版本)
  165. minSize: 0.1,
  166. maxSize: 10000,
  167. pointSizeType: 'ATTENUATED', //'ADAPTIVE'//'ADAPTIVE' \ FIXED //ADAPTIVE的在小房间里大小会不太匹配,但在远景似乎更好
  168. /*
  169. ATTENUATED : 衰减 真实大小,靠近时感觉是点云一点点变多,缝隙变小
  170. ADAPTIVE: 自适应 大小根据level变化,越高越小。靠近时感觉点云由大慢慢细分成小份。这个感觉更佳但是navvis为何不用这个
  171. */
  172. absolutePanoramaSize: 1.3 ,//全景漫游时的size 是fixed的模式
  173. //sizeAtPanoRtEDL : 2000,
  174. pointColor:'#ffffff',
  175. //sizeAddAtPanoRtEDL : 0.5, //全景模式静止时的size
  176. //ADAPTIVE : 字会失真扭曲
  177. //'ATTENUATED' 往旁边看有缝隙、点在浮动
  178. }
  179. ,
  180. skyboxBgWidth : 100 ,
  181. renderLayers:{//渲染层,方便分批渲染管理,替代scene的创建。数字不代表顺序。(数字不能太大)
  182. bg: 20,
  183. bg2: 21,
  184. skybox: 1,
  185. pointcloud: 11,
  186. sceneObjects:0,//default
  187. model : 2,
  188. light: 15,
  189. measure:4,
  190. magnifier:5,
  191. magnifierContent:16,
  192. volume:6,
  193. transformationTool:7,
  194. map:8,
  195. mapObjects:9,//default
  196. bothMapAndScene: 3,
  197. siteModeOnlyMapVisi:12,//只能mapViewer可见
  198. siteModelMapUnvisi:13,//只有mapViewer不可见
  199. siteModeSideVisi:14,//只有侧面可见
  200. layer1: 18,// 备用1
  201. layer2: 17,// 备用2
  202. },
  203. renderOrders:{ //会影响到绘制、pick时的顺序。
  204. lines:5,
  205. reticule:5,
  206. measureMarker: 6,
  207. measureLabelSub: 7,
  208. measureLabel: 8,
  209. sorptionSign:10,
  210. model:10,
  211. magnifier:50,
  212. },
  213. siteModel:{
  214. names:{
  215. 'building': '建筑',
  216. 'floor':'楼层',
  217. 'room':'房间'
  218. },
  219. floorHeightDefault: 5,//一层楼的高度
  220. },
  221. panosEdit:{
  222. },
  223. tiling: {
  224. panoPreRenderRepeatDelay: 2500,
  225. panoPreRenderDelay: 500,
  226. preRenderTourPanos: browser.valueFromHash("tileprerender", 0),
  227. tilingFlagNames: ["usetiles", "tiles"],
  228. maxNavPanoQuality: browser.valueFromHash("maxtileq", null),
  229. maxZoomPanoQuality: browser.valueFromHash("maxztileq", null),
  230. overlayStyle: browser.valueFromHash("tileoverlay", 0),
  231. uploadIntervalDelay: browser.valueFromHash("tileupdelay", 10 ),
  232. initialIntervalDelay: browser.valueFromHash("itiledelay", 0),
  233. maxNonBaseUploadsPerFrame: browser.valueFromHash("maxnbtpf", 1),
  234. maxBaseUploadsPerFrame: browser.valueFromHash("maxbtpf",6),
  235. customCompression: browser.valueFromHash("tilecustcomp", 0),
  236. mobileHighQualityOverride: !1,
  237. allowUltraHighResolution: !0
  238. },
  239. navigation: {
  240. panoScores: !1,
  241. mouseDirection: !0,
  242. filterStrictness: .75,
  243. angleFactor: -30,
  244. directionFactor: 10,
  245. distanceFactor: -1,
  246. optionalityFactor: 3
  247. }
  248. ,
  249. axis : { 'x':{color:'#ea3f3f'/* '#d0021b' */ /* 'red' */}, 'y':{ color:'#86c215' /* '#86c542' *//* 'green' */}, 'z': {color:'#3396f8'/* '#3399c8' */ /* 'blue' */}, 'xyz':{color:'#ccc',}},
  250. shelterMargin:0.1,
  251. highQualityMaxZoom: 2,
  252. ultraHighQualityMaxZoom: 3,
  253. panoFieldRadius : 10, //当前位置多远范围内可以切全景模式
  254. clickMaxDragDis:5,
  255. clickMaxPressTime:500, //ms
  256. doubleClickTime:200,//双击间隔时间
  257. testNodeCount1: browser.isMobile() ? 5 : 3, //testMaxNode次数达到这个数字时,changePointSize才使用nodeMaxLevel。 (调试时比较卡,在线上实际只需要3)
  258. background: '#232323',
  259. mapBG:/* '#232323', */ '#F5F5F5', //地图的clearColor
  260. colors: { //from navvis
  261. red: [213,0,0],
  262. pink: [197,17,98],
  263. purple: [170,0,255],
  264. "deep purple": [98,0,234],
  265. blue: [ 41,98,255],
  266. "light blue": [ 0,145,234],
  267. cyan: [ 0,184,212],
  268. teal: [ 0,191,165],
  269. green: [0,200,83],
  270. "light green": [ 100,221,23],
  271. lime: [ 174,234,0],
  272. yellow: [ 255,214,0],
  273. amber: [ 255,171,0],
  274. orange: [ 255,109,0],
  275. "deep orange": [ 255,61,0],
  276. },
  277. depthTexUVyLimit: 0.141, // 在这个范围内是没有深度的,从图片算的0.14003, 设置为稍大于这个数值
  278. }
  279. config.OrthoCameraLimit = {
  280. standard:{
  281. zoom:{min:0.0004, max:500}, //如果camera缩太小,地图会因为数字边界问题而扭曲
  282. latPad:20,
  283. xBound:[-4e6, 4e6],
  284. },
  285. expand:{
  286. zoom:{min:0.0004, max:500}, //如果camera缩太小,地图会因为数字边界问题而扭曲
  287. latPad:20,
  288. xBound:[-6e6, 6e6],
  289. },
  290. }
  291. /* 显示模式:
  292. 1只显示点云: 滚轮为前进后退,方向键可以行走。进入漫游点时自动变为混合(这样全景可以弥补缝隙),过渡时只显示点云。
  293. 2只显示全景: 不能任意行走。 过渡时显示贴图材质非edl的点云(否则有折痕不贴合)。
  294. 3混合:都显示。 不能任意行走。过渡时显示贴图材质非edl的点云(因为只显示点云的话不太美,点云很碎,不细腻)
  295. */
  296. window.testLevelSteps = function(steps){//[0.4,0.7,1]
  297. if(!steps){
  298. let s = Potree.config.pointDensity;
  299. steps = [s.low.maxLevelPercent, s.middle.maxLevelPercent, s.high.maxLevelPercent, ]
  300. }
  301. let max = 1
  302. while(++max<=12){
  303. let r1 = steps.map(e=>e * max);
  304. let r2 = steps.map(e=>Math.round(e * max));
  305. console.log(`当nodeMaxLevel为${max}时,每一级的level分别为${r2}, (小数:${r1})`)
  306. }
  307. console.log('请检查每一层的三个level是否有重复')
  308. }
  309. function getPrefix(){
  310. let u = window.location.href.split('//')
  311. let v = u[1].split('/');
  312. return v[0]
  313. }
  314. let isTest = browser.urlHasValue('test')
  315. let settings = {//设置 可修改
  316. editType : '',
  317. number: '', //场景序号
  318. originDatasetId:'',//场景原本的数据集id,应该就是数据集第一个吧
  319. isOfficial:false,
  320. webSite:'testdata',//正式:'datav1', //不同环境对应的静态文件的地址不同
  321. isLocal:false, //是否本地 局域网版本
  322. libsUrl:'../libs/',
  323. displayMode:'',
  324. isTest ,
  325. prefix: getPrefix(),
  326. pointDensity: '', UserPointDensity:'',//pointDensity会随着进入不同的模块而自动改变,UserPointDensity记录了用户的设置
  327. UserDensityPercent:null,//点云密度百分比
  328. ifShowMarker:true,//显示漫游点
  329. floorplanType:{},//平面图类型 'default' | 'diy' 不同数据集不同{datasetId:...}
  330. floorplanEnable:false,
  331. floorplanEnables:{},
  332. floorplanRequests:{},//开始加载了的
  333. mapEnable:true,//地图区域是否加载地图
  334. cameraFar : config.view.far, //相机最远范围 1-300
  335. //limitFar: true, //是否使用setting的cameraFar来限制(如在点云裁剪时为false)
  336. showPanoMesh:false, //显示小球,
  337. dblToFocusPoint:false,//调试时如果需要双击飞向某个点云的点,就打开。此时不在漫游点的话单击将无法漫游。//因和单击漫游冲突
  338. unableNavigate : false,//进入如裁剪界面时 禁止漫游
  339. sizeFitToLevel: false,//当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2
  340. zoom:{
  341. enabled : true,
  342. min:1,
  343. max: config.highQualityMaxZoom
  344. },
  345. navConstantly:true,
  346. navTileClass: /* browser.isMobile() ? '1k' : */ '2k', //默认加载到
  347. tileClass:'4k', //最高可达
  348. /* loadTilesWhenUnfocus:false, //页面unfocus时也仍在加载tiles
  349. loadPointsWhenUnfocus:true, //页面unfocus时也仍在加载点云 */
  350. //initialShowPano:true
  351. drawEntityData: false, //包括marker、线
  352. zoomFromPointert:{//定点缩放(包括点云模式、全景模式、地图)
  353. whenPanos:true,
  354. whenPointCloud:true,
  355. map:true,
  356. },
  357. rotAroundPoint:true,//点云模式是否能绕intersectPoint旋转
  358. tourTestCameraMove:false, //测试镜头时,不移动真实的镜头, 只移动frustum
  359. cameraAniSmoothRatio : 20, //镜头动画平滑系数,越高越平滑
  360. urls : $.extend({}, config.urls, {
  361. prefix : config.urls.prefix4 //主要使用的 是测试环境,根据不同工程更改
  362. }),
  363. useDepthTex: true,//使用深度贴图,但不代表一定有(得到的intersect更快速准确和稳定) SS-t-7DUfWAUZ3V
  364. //matUseDepth:false,
  365. //panoEdit:
  366. datasetsPanos:{},
  367. //mergeModel:
  368. boundAddObjs:false,
  369. intersectOnObjs:false,
  370. intersectWhenHover:true,
  371. depTexLocBindDataset: true,//是否在pano模式下,使用深度图得到intersect的话,改intersect能属于该pano所在的点云。也就相当于在全景模式下intersect的点属于该全景图
  372. notAdditiveBlending:false, //点云是否使用普通的blend, 否则会曝光过渡
  373. precision:0, // 位小数
  374. useV4url:true, //v4的全景图等路径不一样 scene_view_data
  375. useRTskybox:true, //直接使用rtEDL绘制到屏幕,当是全景模式时. 在降4倍时能给render节省1毫秒,gpu时间未测
  376. //useRTPoint:true, //直接使用rtEDL绘制到屏幕,当是点云模式时。可以大大节省gpu时间. 大部分时候是有测量线的,失去抗锯齿了算了
  377. pointEnableRT:false,//点云是否允许绘制到rtEDL。只在有需要时使用
  378. cloudSameMat:true, //因为点云个数较多,就使用相同的材质,可见降低绘制速度(要保证所有点云的maxNodelevel一样,且要算出 material.spacing的平均值)
  379. //showCompass : isTest,
  380. showAxis : isTest,
  381. //testCube : true,
  382. adsorption:true,
  383. }
  384. settings.isLocalhost = settings.prefix.includes('localhost')
  385. Potree.config = config
  386. Potree.settings = settings
  387. console.log('2023-1')
  388. export {config, settings}