xzw před 2 měsíci
rodič
revize
ad9dd19ddd
2 změnil soubory, kde provedl 34 přidání a 4 odebrání
  1. 12 2
      src/loader/BinaryLoader.js
  2. 22 2
      src/workers/BinaryDecoderWorker.js

+ 12 - 2
src/loader/BinaryLoader.js

@@ -63,7 +63,9 @@ export class BinaryLoader{
 
 		let workerPath = Potree.scriptPath + '/workers/BinaryDecoderWorker.js';
 		let worker = Potree.workerPool.getWorker(workerPath);
-
+        let maxRest = 3 * ((Potree.settings.splatSH+1)*(Potree.settings.splatSH+1) - 1)
+        
+        
 		worker.onmessage = function (e) {
 
 			let data = e.data;
@@ -116,7 +118,15 @@ export class BinaryLoader{
 					let bufferAttribute = new THREE.BufferAttribute(new Float32Array(buffer), 6);
 					geometry.setAttribute('covs', bufferAttribute);
                   
-				} /* else if(property != 'GS3D'){//改
+				}else if (property === "sh") {//add
+					let bufferAttribute = new THREE.BufferAttribute(new Float32Array(buffer),maxRest);
+					geometry.setAttribute('sh', bufferAttribute);
+                  
+				} 
+                
+                 
+                
+                /* else if(property != 'GS3D'){//改
                     //geometry.setAttribute("rgba", new THREE.BufferAttribute(new Uint8Array(buffer), 4, true));
 					const bufferAttribute = new THREE.BufferAttribute(new Float32Array(buffer), 1);
  

+ 22 - 2
src/workers/BinaryDecoderWorker.js

@@ -369,9 +369,29 @@ onmessage = function (event) {
             
             attributeBuffers['covs'] = { buffer: buff3, attribute: pointAttribute };
             
+            //sh
+            if(Potree.settings.splatSH){
+                let sh = Potree.settings.splatSH
+                let maxRest = 3 * ((sh+1)*(sh+1) - 1) //sh=2时要24个数
+                let buff = new ArrayBuffer(numPoints * maxRest*4); 
+                //let shArray = new Float32Array(buff);
+                let subArray 
+                const offset = gs3dProplist.indexOf('f_rest_0')   
+
+                for (let j = 0; j < numPoints; j++) {
+                    //let destView = shArray.subarray(j*maxRest, maxRest);
+                    let byteOffset = 4*j*maxRest
+                    let destView = new Float32Array(buff, byteOffset , maxRest); 
+                  
+                    let start = j * pointAttribute.numElements+offset
+                    subArray = f32.subarray(start, start+maxRest);
+                    destView.set(subArray)  
+                }
+                
+                
+                attributeBuffers['sh'] = { buffer: buff, attribute: pointAttribute };
             
-             
-            
+            }
             
         ////////////////////////////////////////////////////////////////////////////////    
         }else{