三个抖动抖动/抖动顶点

时间:2016-11-08 23:20:35

标签: javascript three.js precision shake jitter

我在THREE.js中构建一个平铺的滑动地图地球,就像Cesium一样。我遇到的问题是,在高变焦级别,我旋转Perspective / OrbitControls相机时,平铺抖动/抖动。这可能是一个精确的问题,但我不知道如何解决这个问题。

我如何投影瓷砖

  • 创建一个以中心原点为中心的THREE.PlaneBufferGeometry 父行星(Object3D at(0,-planetRadius,0))。
  • 将每个平面的属性顶点(逐个)投影到与其匹配的正确纬度,经度和海拔(lonLatToVector3())。
  • 然后我有一台可以放大飞机/平铺和相机的相机 从相机到图块的距离决定了哪个缩放级别 要渲染的瓷砖。

无法解决问题的事情:

  • 近剪裁平面1。
  • 近距剪裁范围(例如近距离:1远:2)。
  • 一种喀斯特或非对数深度缓冲区。
  • 让相机看着(0,0,0)。
  • 平移旋转行星而不是移动相机。
  • 向上或向下扩展整个世界。

这个问题大多与this stackoverflow question有关,而且我已经修改了这个问题以更好地代表我的问题的核心:

https://jsfiddle.net/6qfaf5h0/

  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
  }

我想要一个带有角度平面的网格&lt; 0.01(当放大到只有几个顶点可见的点时)不会晃动。

其他可能有用的说明:

  • 尽管使用相同的投影算法,精灵也不会晃动。
  • 在某些情况下,即使放大的平面(海拔= 0)平面看起来也都是波浪状的。

非常感谢任何帮助。

0 个答案:

没有答案