如何在three.js中为真实世界的地形创建三角形面?

时间:2013-08-11 09:30:39

标签: three.js

我的目标是创建一个类似于http://css.dzone.com/articles/threejs-render-real-world的场景,但使用矢量X,Y,Z点而不是光栅图像。

this question中,我使用GIS中的真实世界坐标创建了一个three.js场景。这表明可以使用以米为单位的坐标。

这个问题的答案是说要在3点之间创造一个面子:

var face = new THREE.Face3(2, 1, 0);
geometry.faces.push(face);

我如何在数百个点之间创建面孔?我是否需要确定哪些3个坐标组成一个面,或者是否有一个内置方法可以从geometry对象计算出来?

http://jsfiddle.net/slead/rJj3f/1/处有一个基本样本,显示了更大的输入点样本。

由于

2 个答案:

答案 0 :(得分:1)

其他人可能会更好地回答这个问题。但基本上是的,你需要弄清楚每个面上有哪些3点,这取决于源数据的排列方式。它是以某种方式排序的,是随机样本,还是某种网格形式的样本?源点是描述任意形状还是已经描述了三角形。不知道构建有意义的面孔是不可能的。如果源数据已经描述了三角形,那么这样的东西可以起作用:

for (var i = 0; i < points.length; i = i +3) {
  var face = new THREE.Face3(i + 2, i + 1, i);
  geometry.faces.push(face);
}

但在你的情况下看起来并不那么简单。可能无法直接将数据解释为三角形。我认为,拆分任意形状和多于3个角的多边形称为曲面细分和/或三角剖分。我认为Three.js有一些三角测量工具。您还可以使用THREE.Shape从任意形状构造几何图形,但看起来它只适用于2D源矢量数据。

最初使用粒子可能是一个好主意,因此您可以以点云形式查看和研究数据。然后弄清楚如何将其转换为地形。

如果您只关心将数据用作一种高度图(不确定,但我假设GIS数据由任意三维形状组成)。您可以通过创建具有与数据点一样多的点的THREE.Plane网格来生成地形。然后按X和Z对源数据进行排序,然后遍历网格顶点并将每个网格点设置为与最近(忽略高程)源数据点相同的X,Y,Z。或类似的......

答案 1 :(得分:1)

您拥有代表真实世界地形的所有这些数据点。 从本质上讲,这些数据点组成了一个大网格。 因此,对于任何给定点(顶点),您都知道相邻的数据点(顶点)。 因此,构建三角形应该是微不足道的。

现在怀疑你已经知道了。所以我猜你是在试图看看three.js是否有办法根据三角形条带甚至三角扇的概念生成面部。我对么?

无论哪种方式,我相信你将不得不利用缓冲来渲染如此多的具有良好帧率的三角形。您还应该像经典的quad-tree.

一样研究某种细节层次(LOD)管理