2016-04-07 71 views
0

Kaba yükseltmeler içeren bir dosyam var. Gps verisine dayanıyor. Bir PlaneBuffer dizisini yükseltmelerle doldurmak için bu verileri kullanıyorum.THREE.js seyrek düzlemBufferGeometry

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

Benim sorun yükseklik değerleri bilinmemektedir (Vertex dizi yükselmesi ile seyrek) ve bir düzlemde delik/kesikler ile temsil edilmelidir düğümleri olmasıdır. Neyle sonuçlandığım, sıfır delillerin delikleri değil 0 olarak yorumlanmasıdır. rawshader'u kullanma yolunu kullanmaya başladım, ancak hala boş değerlerin saydam olmasının doğru yöntem olduğundan emin değilim.

Aşağıdaki resim benim sorunlarımı göstermektedir. Dairesel alan, orada olmaması gereken yüksek bir duvardır, çünkü "sıfır/0" zeminine üçgenleme yapar. Kırmızı çizgiler alanı, bir deliğe sahip olmamız gereken yer. enter image description here

EDIT: Belki bu resim size yardımcı olacaktır. Alttan. Sıfır yükseklikleri sıfır olarak ayarlandı ve düzlemin kenarının uç düzleminin 0'a kadar üçgenlenmesini sağladı: enter image description here

Masaüstü uygulamamızı görüntüler. Düzlemin kenarlarının sıfıra indirilmediğine dikkat edin ama bunun yerine keskin bir şekilde mi kaldın? enter image description here

+0

bana bir delik gibi görünüyor. Tam olarak ne yapmaya çalışıyorsun? Kodunuz null yüksekliklere nasıl davranmalıdır? – jered

+0

Bir delik değil çünkü yüzey kesmek yerine yüzey 0'a kadar üçgenleniyor. Şeffaf olmasını istiyorum, sıfır yükseklikler bilinmeyen ve şeffaf olarak 0 olarak ele alınmalıdır. Siyah olduğu için bir deliğe benziyor. – LrakWortep

+0

Eğer bu köşeleri zorlamak istiyorsanız, bunu elle yapmanız gerekecektir. THREE.js, geometriyi çıkarmak için yerleşik CSG işlemlerine sahip değildir. Şeffaf bitlerle sürekli bir yüzey olmasını istiyorsanız, bir gölgelendirici muhtemelen gitmek için bir yoldur. – jered

cevap

0

Düzlem tampon Geometrileri bir Float32Array alır. Bu dizi varsayılan olarak 0 olarak ayarlanmıştır. undefined ayarlayıcısının kullanılması, seyrek diziyi float32 türünden çıkarmamı sağladı. null ve NanN için herhangi bir değer ayarlama girişimleri işe yaramadı.

KKO:

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

nihai sonuç beklendiği gibi: enter image description here