0

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

这个问题中,我在使用来自 GIS 的真实世界坐标创建 three.js 场景方面获得了一些帮助。这表明可以使用以米为单位的坐标。

该问题的答案说要在 3 点之间创建一张脸:

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

我将如何在数百个点之间创建面?是由我来确定哪一组 3 个坐标构成一张脸,还是有一个内置方法可以从geometry对象中计算出来?

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

谢谢

4

2 回答 2

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 数据由任意 3 维形状组成)。您可以通过创建一个包含与数据点一样多的点的 THREE.Plane 网格来生成地形。然后按 X 和 Z 对源数据进行排序,然后遍历网格顶点并将每个网格点设置为与最近(忽略高程)源数据点相同的 X、Y、Z。或类似的东西...

于 2013-08-11T10:27:41.433 回答
1

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

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

无论哪种方式,我相信您必须使用缓冲才能以良好的帧速率渲染如此多的三角形。您还应该在这里查看某种详细级别 (LOD) 管理,例如经典的四叉树。

于 2016-07-25T19:09:48.147 回答