xzw 9 месяцев назад
Родитель
Сommit
ea7709e02f

+ 1 - 1
libs/three.js/loaders/GLTFLoader.js

@@ -2615,7 +2615,7 @@ class GLTFDracoMeshCompressionExtension {
 			var samplers = json.samplers || {};
 			var sampler = samplers[ textureDef.sampler ] || {};
             
-            
+            texture.encoding = THREE.LinearEncoding//add
             Potree.Utils.makeTexDontResize(texture) //add
   
             /* //xzw 删除设置,因为已经makeTexDontResize

+ 3 - 3
src/custom/materials/BasicMaterial.js

@@ -10,10 +10,10 @@ let getName = ()=>{
 
 class BasicMaterial  extends THREE.ShaderMaterial{ 
     constructor(o={}){
-       
-       super( Object.assign({},{ 
+       let color = o.color ? o.color instanceof THREE.Color ? o.color : new THREE.Color(o.color) : new THREE.Color("#FFF")
+       super( Object.assign({},{  
             uniforms:{
-                color:  {type:'v3',   value: o.color || new THREE.Color("#FFF")} ,
+                color:  {type:'v3',   value: color} ,
                 map:    {type: 't',    value: o.map },
                 opacity : {type:'f',    value : 1}
                  

+ 13 - 1
src/custom/mergeStartTest.js

@@ -719,7 +719,19 @@ var start = function(dom, mapDom, number, fileServer, webSite){ //t-Zvd3w0m
                         position : [0,0,10]  
                     }   
                 },callback,onprogress)
-            }
+            }else if(name == 'photo' || name == 'video'){ 
+                viewer.loadModel({  
+                    fileType: 'overlay',
+                    mediaType : name,
+                    isNew:true,
+                    url: url || (name == 'photo' ? Potree.resourcePath+'/textures/fire.png' : Potree.resourcePath+'/videos/7.mp4' )
+                    /* transform : { 
+                        rotation : [-Math.PI/2,  0,   0],
+                        position : [0,0,10]  
+                    }  */  
+                },callback,onprogress)
+                //Potree.addModel('photo') or Potree.addModel('video')
+            } 
         }  
     }
      

+ 3 - 2
src/custom/objects/Overlay.js

@@ -3,7 +3,7 @@
 import * as THREE from "../../../libs/three.js/build/three.module.js";
 import BasicMaterial from '../materials/BasicMaterial.js'  
 
-const planeGeometry = new THREE.PlaneGeometry(1,1)
+const planeGeometry = new THREE.PlaneBufferGeometry(1,1)
 const height4dkk = 0.5 //4dkk的planeGeometry高度
 let texLoader = new THREE.TextureLoader()  
 import FlvVideoPlayerBase from '../utils/media/FlvVideoPlayerBase'
@@ -33,7 +33,8 @@ export default class Overlay extends THREE.Object3D {
         this.add(plane)
         this.plane = plane
         
-        this.setContent(data.mediaType, data.url, data.isNew)
+ 
+        this.setContent( data.media[0], data.url, data.isNew)
         //this.setScale(data.width, data.height)
         this.scale.set(data.width||1, data.height||1,  1) //需要把width转化一下吗,还是后端转化?
         this.addEventListener('dispose',this.dispose.bind(this))

+ 20 - 10
src/custom/start.js

@@ -895,8 +895,8 @@ export function mergeEditStart(dom, mapDom){
             {//设置下默认经纬度位置,当点击恢复默认时要恢复到此位置
                 
                 if(!model.isPointcloud){ //有经纬度    3dtiles
-                    model.rotation.copy(prop.baseRotation) //有的需要翻转90度 
-                    let lonlat = prop.raw.wgs84 || prop.raw.rtkLocation  //前者为素材库的osgb的
+                    prop.baseRotation && model.rotation.copy(prop.baseRotation) //有的需要翻转90度 
+                    let lonlat = prop.raw?.wgs84 || prop.raw?.rtkLocation  //前者为素材库的osgb的
                     if(lonlat){ 
                         var locationLonLat = lonlat.split(',').map(e=>parseFloat(e))
                         var location = new THREE.Vector3().fromArray(viewer.transform.lonlatToLocal.forward(locationLonLat)) 
@@ -920,7 +920,7 @@ export function mergeEditStart(dom, mapDom){
                             }
                         }else{
                             MergeEditor.moveBoundCenterTo(model, location )   
-                            if(prop.raw.orientation){
+                            if(prop.raw?.orientation){
                                 model.rotation.y = parseFloat(prop.raw.orientation)  
                             }  
                             if(prop.is4dkkModel){
@@ -1048,9 +1048,9 @@ export function mergeEditStart(dom, mapDom){
             MergeEditor.modelTransformCallback(model, true)
             prop.scale != void 0 && model.isPointcloud && model.changePointSize()   //有的被缩放的很小导致testMaxNodeLevel时距离较远时被return 但点云过大急需changesize
             
+             
             
-            
-            done(model) // 先发送成功,因为2d界面会随机执行changePosition等初始化,然后这边再将模型移到中心地面上
+            done && done(model) // 先发送成功,因为2d界面会随机执行changePosition等初始化,然后这边再将模型移到中心地面上
             
             
             if(prop.isFirstLoad){  
@@ -1088,7 +1088,7 @@ export function mergeEditStart(dom, mapDom){
           
         if(prop.type == 'obj' || prop.type == 'glb'){  
             let callback = (object)=>{  
-                object.isModel = true 
+               
                 object.traverse(e=>e.material && (e.material.transparent = true))
               
                 loadDone(object)
@@ -1107,7 +1107,7 @@ export function mergeEditStart(dom, mapDom){
         }else if(prop.type == 'osgb' || prop.type == 'b3dm'){  //3d tiles  
         
             let callback = (object)=>{ 
-                object.isModel = true  
+               
                 loadDone(object)
             } 
         
@@ -1121,8 +1121,7 @@ export function mergeEditStart(dom, mapDom){
         
         }else if(prop.type == 'shp'){
 
-            let callback = (object)=>{ 
-                object.isModel = true  
+            let callback = (object)=>{  
                 loadDone(object)
             }  
             viewer.loadModel({  
@@ -1137,7 +1136,6 @@ export function mergeEditStart(dom, mapDom){
         }else if(prop.type == '3dgs'){ 
         
             let callback = (object)=>{ 
-                object.isModel = true 
                 
                 loadDone(object)
             } 
@@ -1148,7 +1146,19 @@ export function mergeEditStart(dom, mapDom){
                 url:prop.url,
                 
             },callback,onprogress) 
+        }else if(prop.type == 'media'){ 
+        
+            let callback = (object)=>{  
+                prop.model.add(object)
+                loadDone(object)
+            } 
              
+            viewer.loadModel(Object.assign(prop,{  
+                fileType: 'overlay', 
+                
+            }),callback,onprogress)
+            //Potree.addModel('photo') or Potree.addModel('video')
+            
         }else{  
              
             prop.url instanceof Array && (prop.url = prop.url[0]) //deal bug

+ 12 - 1
src/custom/viewer/ViewerNew.js

@@ -40,6 +40,7 @@ import {Sidebar} from "../../viewer/sidebarNew.js";
 
 import {AnnotationTool} from "../../utils/AnnotationTool.js";
 import {MeasuringTool} from "../objects/tool/MeasuringTool.js"; 
+import Overlay from "../objects/Overlay.js";
 import CursorDeal from '../utils/CursorDeal.js'
 import Common from '../utils/Common.js' 
 import browser from '../utils/browser.js'
@@ -1064,7 +1065,11 @@ export class Viewer extends ViewerBase{
         object.traverse((mesh, o={})=>{
             //let visi = o.visible === false ? false : mesh.visible    //mesh.realVisible() //如果祖先不可见,此mesh一定不可见
             if(mesh.geometry){
-                posCount += mesh.geometry.attributes.position.count 
+                if(mesh.geometry instanceof THREE.BufferGeometry ){
+                    posCount += mesh.geometry.attributes.position.count 
+                }else{
+                    posCount += mesh.geometry.vertices.length 
+                }
                 //visi && (visiPosCount += mesh.geometry.attributes.position.count)
             }
             /* if(mesh.material && !mesh.material.map){
@@ -6007,6 +6012,12 @@ export class Viewer extends ViewerBase{
             
             loadDone(shpModel)
             
+        }else if(fileInfo.fileType == 'overlay'){ 
+            
+            let overlay = new Overlay(fileInfo)
+            overlay.unableEdit = true
+            loadDone(overlay)
+            
         }else if(fileInfo.fileType == '3dgs'){
              
             const gsViewer = new GaussianSplats3D.Viewer({