xzw 3 年之前
父节点
当前提交
1388b93ebb
共有 1 个文件被更改,包括 29 次插入2 次删除
  1. 29 2
      web/public/static/js/main_2020_show.js

+ 29 - 2
web/public/static/js/main_2020_show.js

@@ -153,7 +153,7 @@ var addMagnifier = function(){
 }
   */
  
-var convertTool = { 
+var convertTool = {  
 	getPos2d : function(point, camera, dom){//获取一个三维坐标对应屏幕中的二维坐标
 		var camera = camera || player.camera;
 		var dom = dom || player.domElement;
@@ -308,7 +308,34 @@ var convertTool = {
 		dir.multiplyScalar(Constants.skyRadius);   
 		dir.add(toPanoPos); 
 		return dir;
-	} 
+	} ,
+     getScaleForConstantSize : function(op={}){ //获得规定二维大小的mesh的scale值。可以避免因camera的projection造成的mesh视觉大小改变。  来源:tag.updateDisc
+        var w;  
+        var i = new THREE.Vector3, o = new THREE.Vector3, l = new THREE.Vector3, c = new THREE.Vector3, h = new THREE.Vector3
+         
+        if(op.width2d) w = op.width2d //如果恒定二维宽度
+        else{//否则考虑上距离,加一丢丢近大远小的效果
+            var currentDis, nearBound, farBound
+            if(op.camera.type == "OrthographicCamera"){
+                currentDis = (op.camera.right - op.camera.left) / op.camera.zoom
+            }else{
+                currentDis = op.position.distanceTo(op.camera.position);
+            } 
+            w = op.maxSize - ( op.maxSize -  op.minSize) * THREE.Math.smoothstep(currentDis,  op.nearBound,  op.farBound);
+            //maxSize : mesh要表现的最大像素宽度;   nearBound: 最近距离,若比nearBound近,则使用maxSize
+        }
+        i.copy(op.position).project(op.camera),  //tag中心在屏幕上的二维坐标
+        o.set(op.resolution.x / 2, op.resolution.y / 2, 1).multiply(i), //转化成px   -w/2 到 w/2的范围
+        l.set(w / 2, 0, 0).add(o),  //加上tag宽度的一半
+        c.set(2 / op.resolution.x, 2 / op.resolution.y, 1).multiply(l), //再转回  -1 到 1的范围
+        h.copy(c).unproject(op.camera);//再转成三维坐标,求得tag边缘的位置
+        var g = h.distanceTo(op.position)//就能得到tag的三维半径
+    
+        return g  //可能NAN  当相机和position重叠时
+         
+    } 
+    
+    
 }