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 の例に見られるように Modifier を使用して実行できます。

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 に答える