Browse Source

fix: if(uv2.y > 0.75) distance = height / -dir.y;

xzw 2 năm trước cách đây
mục cha
commit
fcd9c23638

+ 2 - 1
src/custom/materials/BasicMaterial.js

@@ -13,7 +13,8 @@ class BasicMaterial  extends THREE.ShaderMaterial{
                 opacity : {type:'f',    value : o.opacity == void 0 ? 1 : o.opacity }
             },
             vertexShader: Shaders['basicTextured.vs'],   
-            fragmentShader: Shaders['basicTextured.fs']  
+            fragmentShader: Shaders['basicTextured.fs'], 
+            defines:{HasColor:''}
         },o))
             
     } 

+ 1 - 1
src/custom/materials/ModelTextureMaterial.js

@@ -203,7 +203,7 @@ let shader = {
                     float distance = (depth.g + depth.r / 256.) * 255.;  //为什么要乘以255 
                     
                     if(distance == 0.0){//漫游点底部识别不到的区域,给一个地板高度 
-                         if(uv2.y > 0.75) distance = height / dir.y; 
+                         if(uv2.y > 0.75) distance = height / -dir.y;   
                          else distance = 100000.0;//给个超级远的值
                     } 
                     

+ 5 - 19
src/custom/modules/panos/tile/PanoRenderer.js

@@ -9,6 +9,8 @@ import * as THREE from "../../../../../libs/three.js/build/three.module.js";
 import math from '../../../utils/math.js' 
 import browser from '../../../utils/browser.js' 
 import Common from '../../../utils/Common.js'
+import BasicMaterial from '../../../materials/BasicMaterial.js'  
+
 let {PanoSizeClass, PanoRendererEvents , Vectors,SceneRendererEvents,TileDownloaderEvents, GLCubeFaces} = Potree.defines
  
 
@@ -1046,24 +1048,8 @@ PanoRenderer.prototype.renderToCubeMap = function() {
         inited || (camera = new THREE.OrthographicCamera(l / -2, l / 2, l / 2, l / -2, -200, 200),
             camera.position.z = 150,
             scene = new THREE.Scene,
-            scene.add(camera),
-            material = new THREE.ShaderMaterial({
-                uniforms: {
-                    map: {
-                        type: "t",
-                        value: null
-                    },
-                    opacity: {
-                        type: "f",
-                        value: 1
-                    }
-                },
-                vertexShader: Shaders['basicTextured.vs'],   
-                fragmentShader: Shaders['basicTextured.fs'],
-                depthWrite: !1,
-                depthTest: !1,
-                side: 0,//THREE.DoubleSide
-            }),
+            scene.add(camera),  
+            material = new BasicMaterial({  depthWrite: !1,  depthTest: !1, side: 0,}),  
             geo = new THREE.PlaneBufferGeometry(l, l),
             plane = new THREE.Mesh(geo, material),
             plane.position.z = 0,
@@ -1113,7 +1099,7 @@ PanoRenderer.prototype.renderToCubeMap = function() {
             posArr[10] = N;
             
         //renderer.properties.get(scene); 
-        material.uniforms.map.value = texture;
+        material.map = texture//material.uniforms.map.value = texture;
         material.blending = E || THREE.NoBlending,
         material.transparent = !!b 
         

+ 3 - 3
src/custom/potree.shim.js

@@ -1403,10 +1403,10 @@ Potree.updateVisibility = function(pointclouds, camera, areaSize){
 				}
 				weight = screenPixelRadius;
                 
-                if(!sphere.containsPoint(camObjPos) ){ //add 优先加载屏幕中央的点云(手机端缩小离远效果明显,不会那么稀疏)
+                if( !sphere.containsPoint(camObjPos) ){ //add 优先加载屏幕中央的点云(手机端缩小离远效果明显,不会那么稀疏)
                     let dir = new THREE.Vector3().subVectors(center, camObjPos).normalize() 
-                    let cos = dir.dot(camObjDir) 
-                    weight *= cos*cos 
+                    let cos = 1+dir.dot(camObjDir) //0-2
+                    weight *= cos//Math.pow(cos,0.5)   //幂越高,旁边的容易加载不到,出现缺块
                 } 
                 
 				if(distance - radius < 0){

+ 2 - 2
src/custom/viewer/ViewerNew.js

@@ -2799,7 +2799,7 @@ export class Viewer extends ViewerBase{
                  
                 if(Potree.settings.notAdditiveBlending){
                     params.renderBeforeCloud = true
-                    this.renderOverlay1(params)   //先渲染不透明的model  
+                    this.renderOverlay1(params)   //先渲染不透明的model。  但drawedModelOnRT时这里提前多渲染了一遍  
                 }   
             }
            
@@ -4731,7 +4731,7 @@ export class Viewer extends ViewerBase{
 
 //------  CLIP  默认clipTask都是clipInside ----------------------
 /* 
-并集相当于加法,交集相当于法。 所有结果都能展开成多个乘积相加。
+并集相当于加法,交集相当于法。 所有结果都能展开成多个乘积相加。
 假设有4个clipBoxes,ABCD,   如果是  A*B + C*D ,那么这是最终结果。  如果是 (A+B)*(C+D) = A*C+A*D+B*C+B*D 
  */
  /* 

+ 14 - 8
src/materials/shaders/basicTextured.fs

@@ -1,22 +1,28 @@
 varying vec2 vUv;
 uniform float opacity;
  
-uniform vec3 color;
+
 #ifdef HasMap
     uniform sampler2D map;   
 #endif
-
+#ifdef HasColor
+    uniform vec3 color;
+#endif
 
 void main() {
-     
+    vec4 color_;
+    #ifdef HasColor
+        color_ = vec4(color, opacity); 
+    #else
+        color_ = vec4(1.0,1.0,1.0, opacity);
+    #endif
+    
     #ifdef HasMap
-        vec4 texColor = texture2D(map, vUv);
-        gl_FragColor = texColor * vec4(color, opacity);
+        vec4 texColor = texture2D(map, vUv); 
+        gl_FragColor = texColor * color_;
     #else
-        gl_FragColor = vec4(color, opacity);
+        gl_FragColor = color_;
     #endif
- 
   
-    //gl_FragColor = vec4(texColor.rgb, texColor.a * opacity);
    
 }