2016-04-07 46 views
0

疎な高さのファイルがあります。これはgpsデータに基づいています。私はこのデータを使用してPlaneBuffer配列に標高を設定しています。THREE.js sparse planeBufferGeometry

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; 
    } 

私の問題は、標高値が未知である(頂点配列が上昇と疎である)と、面内の穴/切り欠きで表さなければならないノードが存在することです。私が結んだのは、ヌル高さがホールではなく0として解釈されることです。 rawshaderを使用する方法を開始しましたが、null値を透過的にすることが正しい方法であることはまだ分かりません。

下の写真は私の問題を示しています。丸で囲まれたエリアは、そこにはいけない高層の壁です。なぜなら、それが "null/0"の床に三角形を描くからです。赤い線の部分は穴がある場所です。 enter image description here

編集: この画像は役に立ちます。それは底からです。ヌルの標高がゼロに設定されていると、平面のビューがブロックされ、平面のエッジが0の三角形になります。enter image description here

ここにデスクトップアプリケーションが表示されます。平面のエッジが三角形分割されずにゼロになることに注意してください。 enter image description here

+0

は私に穴のように見えます。あなたは正確に何をしようとしていますか?あなたのコードでヌル標高をどのように扱うべきですか? – jered

+0

表面が切り取られるのではなく、0に三角形分割されているため、穴ではありません。私はそれを透明にしたい、ヌル標高は0の代わりに未知で透明として扱われるべきです。それは黒のために穴のように見えます。 – LrakWortep

+0

これらの頂点を絞りたい場合は、手動で行う必要があります。 THREE.jsには、ジオメトリを引くためのCSG演算が組み込まれていません。透明なビットを持つ連続したサーフェスにしたい場合は、おそらくシェーダーが必要です。 – jered

答えて

0

プレーンバッファジオメトリがFloat32Arrayを取ります。この配列はデフォルトで0に設定されています。undefined setterを使用すると、sparse配列を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

最終結果: enter image description here