【问题标题】:How to create triangle faces for a real-world terrain in three.js?如何在 three.js 中为真实世界的地形创建三角形面?
【发布时间】:2016-07-26 03:09:48
【问题描述】:

我的目标是创建一个类似于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/ 有一个基本样本,显示了更大的输入点样本。

谢谢

【问题讨论】:

    标签: three.js


    【解决方案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,您可以使用它从任意形状构造几何图形,但看起来它只适用于二维源矢量数据。

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

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

    【讨论】:

    • 再次感谢。我会试一试并报告结果
    • @slead:你在这方面有什么进展吗?我正在尝试做几乎完全相同的事情。
    • @OddityOverseer 还没有,这更像是一个附带项目,所以我没有花太多时间。
    【解决方案2】:

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

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

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

    【讨论】:

    • 很好的链接!一直在寻找这样的东西。
    猜你喜欢
    • 2019-09-08
    • 2017-12-15
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多