Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript THREE.js抖动/抖动顶点_Javascript_Three.js_Precision_Shake_Jitter - Fatal编程技术网

Javascript THREE.js抖动/抖动顶点

Javascript THREE.js抖动/抖动顶点,javascript,three.js,precision,shake,jitter,Javascript,Three.js,Precision,Shake,Jitter,我正在用THREE.js构建一个平铺的拖拉地图地球仪,很像。我遇到的问题是,当我在高缩放级别旋转透视/轨道控制相机时,瓷砖抖动/抖动。这可能是一个精度问题,但我不知道如何解决这个问题 我如何投影瓷砖: 创建一个以原点为中心的三点几何图形 父行星(位于(0,-planetRadius,0)的Object3D) 将平面的每个属性顶点(逐个)投影到与其正确的纬度、经度和高程(lonLatToVector3())匹配的点 然后我有了一个可以放大平面/瓷砖的相机和 从摄影机到平铺的距离决定了缩放级别 要

我正在用THREE.js构建一个平铺的拖拉地图地球仪,很像。我遇到的问题是,当我在高缩放级别旋转透视/轨道控制相机时,瓷砖抖动/抖动。这可能是一个精度问题,但我不知道如何解决这个问题

我如何投影瓷砖:

  • 创建一个以原点为中心的三点几何图形
    父行星(位于(0,-planetRadius,0)的Object3D)
  • 将平面的每个属性顶点(逐个)投影到与其正确的纬度、经度和高程(lonLatToVector3())匹配的点
  • 然后我有了一个可以放大平面/瓷砖的相机和 从摄影机到平铺的距离决定了缩放级别 要渲染的平铺
无法解决问题的事情:

  • 接近1的剪裁平面
  • 近-远剪裁范围(例如近:1、远:2)
  • 对数地学或非对数地学深度缓冲区
  • 保持相机注视(0,0,0)
  • 平移旋转行星而不是移动相机
  • 放大或缩小整个世界

这个问题与我的问题最为相关,我修改了小提琴,以更好地代表我问题的核心:

for(var p=0;p//网格.几何体.属性.位置.数组[p+2]=0;//这可能也与你的比例有关。你不是太“小”了吗?@ValentinRoudge我想是的。我尝试过放大这个星球,但似乎没有帮助。可能是我越放大这个星球,我的瓷砖越大,但它们离原点越远,这也会导致震动。太“小”的度量是什么?为什么值得一提的是,从xyzPos.z中减去Planet的半径似乎可以解决抖动问题。但是,我不确定这是否有助于您尝试实现的目标。这肯定是浮点精度和您尝试使用的有效位数的问题。@msun实际上,这非常有帮助。似乎我需要这两个方面e行星中心和表面上的注视点位于场景的原点。谢谢!=)
  for (var p = 0; p < mesh.geometry.attributes.position.array.length; p += 3) {
    var xyzPos = lonLatToVector3(0 + (((p / 3) % tileRes) / (tileRes - 1)) * anglePlane,
      0 + (parseInt((p / 3) / tileRes) / (tileRes - 1)) * anglePlane,
      0);

    mesh.geometry.attributes.position.array[p] = xyzPos.x;
    mesh.geometry.attributes.position.array[p + 1] = xyzPos.y;
    mesh.geometry.attributes.position.array[p + 2] = xyzPos.z;
    //mesh.geometry.attributes.position.array[p + 2] = 0; //<- uncommenting fixes shake but I need this axis
  }