THREE.js 稀疏 planeBufferGeometry

THREE.js sparse planeBufferGeometry

我有一个标高稀疏的文件。它基于 GPS 数据。我一直在使用这些数据来填充具有高程的 PlaneBuffer 数组。

var vertices = new Float32Array( (grid.NCOL*grid.NROW) * 4 );
for (var i = 0, q = vertices.length; i < q; i++){
        vertices[ i*3 + 0 ] = parseInt(i % (grid.NCOL+1)*4);
        vertices[ i*3 + 1 ] = parseInt(i / (grid.NCOL+1)*4);
    //  vertices[ i*3 + 2 ] = null; // makes no difference

    }
for (var i = 0, l = grid.NODES.length; i < l; i++) {
        var nodeNumber = grid.NODES[i][0];
        var elevation= grid.NODES[i][1];
        vertices[ nodeNumber*3 + 2 ] = elevation;
    }

我的问题是有些节点的高程值是未知的(顶点数组是稀疏的高程)并且应该在平面中用 holes/cutouts 表示。我最终得到的是空高程被解释为 0 而不是孔。我已经开始使用 rawshader,但仍然不确定使空值透明是正确的方法。

下图显示了我的问题。圆圈区域是一堵高墙,不应该在那里,因为它三角测量到 "null/0" 层。红线区域是我们应该有一个洞的地方。

编辑: 也许这张照片会有所帮助。它来自底部。设置为零的空高程会阻挡平面的视图并导致平面的边缘被三角化为 0 高程:

这是我们的桌面应用程序显示的内容。请注意,平面的边缘没有三角化为零,而是保持锐利?

您的用例似乎更适合 THREE.Points 的点云。 potree.org/demo/potree_1.3/showcase/ca13.html – WestLangley 14 分钟前

这个例子帮助了:

http://threejs.org/examples/#webgl_buffergeometry_points

Plane buffer Geometries 采用 Float32Array。该数组默认设置为 0。使用 undefined setter 允许我将稀疏数组设置为 float32 类型。尝试将任何值设置为 nullNanN 均无效。

RTFM:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array

最终结果符合预期: