0

我想根据纬度和经度数据在立方体几何之上创建一个地形。我有一个对象数组,其中包含纬度、经度和变形特定坐标的量。

var geo = new THREE.CubeGeometry( 10, 20, 40, 40, worldWidth, worldDepth);
var worldWidth = 100, worldDepth = 100;
for ( var i = 0; i < worldWidth; i++ ) {
    for ( var j = 0; j < worldDepth; j++ ){
        for (var k = 0; k < locations.length; k++ ) {
            var index = j * worldWidth + i;
            var x = worldWidth * (locations[k].lng + 180) / (2 * 180);
            var y = worldDepth * (locations[k].lat + 180) / (2 * 180);
            var dx = i - x;
            var dy = j - y;
            var dist = Math.sqrt( dx*dx + dy*dy );
            if ( dist < .5 ) {
                geo.vertices[index].x += locations[k].count * .05;
            }
        }
    }
}

现在,这段代码只是将每个最接近纬度和经度的坐标向上推。有没有办法可以平滑每个位置坐标周围的区域,使其看起来像地形而不是尖峰?

4

1 回答 1

0

美好的一天,对我来说,这听起来像是您希望细分网格,从而“平滑”出峰谷效应。这可以使用修改器来完成,如以下 Three.js 示例所示:

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

现在这里的基本原则是:

1) 使用 Three.js 的最新版本

2) 下拉 SubdivisionModifier.js 文件并将其链接到:

<script src="js/modifiers/SubdivisionModifier.js"></script>

3)在初始化期间创建修饰符(玩值,我试过3):

var modifier = new THREE.SubdivisionModifier( 3 );

4)然后在您的顶点操作之后和将您的几何体添加到网格以渲染之前应用修改器,如下所示:

geometry.mergeVertices();
geometry.computeCentroids();
geometry.computeFaceNormals();
geometry.computeVertexNormals();

modifier.modify( geometry );    

试一试,让我们知道它是如何工作的,我会非常渴望找到自己。

于 2013-09-12T15:11:33.843 回答