GPU

2008-09-16 24 views
4

kullanarak nokta bulutunda kesilmiş bir düzlem için sorgu noktaları epsilon-close GPU yeteneklerini kullanarak şu anki sorunu çözmeye çalışıyorum: "bir nokta bulutu P ve bir nokta ve normal tarafından tanımlanan yönlendirilmiş bir düzlem verildi (Pp, Np) buluttaki noktaları, düzlemden EPSILON'a eşit ya da daha düşük bir mesafede yayan ".GPU

1) her bir noktası, farklı tepe 2) grubu çıkıntı durumu koordinat sahip olduğu şekilde koordinat bağlı bir dokuya sahip noktaları olan bir tepe tamponu hazırlamak: Aşağıdaki çözelti doğru konverjans benim bir meslektaşı ile konuşmak

ortogonal 3) mesh düzlemini normal düzlemin -z ekseni ile hizalı olacak şekilde döndürün ve x, y, z = 0, Pp 4'e karşılık gelecek şekilde kaydırın. 4) z-kırpma düzlemini z: [-EPSILON; + EPSILON] 5) bir dokuya dönüşür 6) dokuyu grafik kartından alınız. 7) dokuyu grafik kartından okuyunuz ve p İstenilen mesafe aralığındaki noktalar olan (indeksleri bakımından) oyalar oluşturulmuştur.

Artık sorunlar şu şekildedir: q1) Böyle bir işlemi yapabilmek için bir pencere çerçevesi açmam gerekir mi? MATLAB içinde çalışıyorum ve MEX-C++'ı arıyorum. Deneyimle, yeni bir çerçeve açtığınız anda tüm takımın sefil bir şekilde çökertildiğini biliyorum! q2) GLPoint'e doku koordinatı veren ilkel nedir? q3) Bir dokudaki işlenmenin nasıl uygulanacağını çok net bilemiyorum? herhangi bir referans, öğretici harika olurdu ... q4) Bu doku karttan nasıl alırsınız? Yine, herhangi bir referans, öğretici harika olurdu ...

Sıkışık bir programdayım, bu yüzden, GLSL şartnamesi yerine, öğrenmem gereken tekniklerin isimlerini gösterebilirseniz iyi olurdu Belge ve birileri gibi OpenGL API yaptı. Bunlar soruma çok az belirsiz cevaplar.

Yorumlarınız için çok teşekkürler.

p.s. Ayrıca, eğer mümkünse CUDA gibi herhangi bir kaynak kullanmamayı tercih ederim, bu yüzden 'u mümkün olduğunca fazla OpenGL elemanını kullanarak yeni bir gölgelendirici yazmam gerekmeden bir şey elde etmeyi tercih ediyorum.

Not: çapraz biraz reddi olarak ilk Tamam http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=245911#Post245911

cevap

0

adresinde yayınlanan: Ben 3D programlama hakkında hiçbir şey bilmiyorlar.

Şimdi de tamamen matematiksel fikir:

normal N (birim uzunluğu) ve merkez düzleminin bir L mesafesi kadar bir uçak Verilen (noktası [0/0/0]). X noktasının düzleme olan uzaklığı, N ve X eksi L'nin skalar çarpımı ile merkeze olan uzaklığı ile verilir. Bu nedenle, yalnızca

| n'yi kontrol etmeniz gerekir. x - L | < = epslon

. skaler ürün olmak ve | | mutlak değer Tabii

L.

Belki bu yardımcı olur mesafe almak için, normal ilk uçağı kesiştiği gerekir.

+0

Eğer aşağı oy verirseniz, lütfen bir yorum bırakın. Bilmek isterdim. – Sarien

1

Çok basit: Düzlemin normal olması ve x noktası ol.

n_u = n/norm(n)   //this is a normal vector of unit length 
d = scalarprod(n,x) //this is the distance of the plane to the origin 

for each point p_i 
    d_i = abs(scalarprod(p_i,n) - d) //this is the distance of the point to the plane 

Açıkçası "scalarprod" "sayısal ürünü" ve "ABS" "mutlak değeri" anlamına gelir. Neden wikipedia scalar ürünlerde makaleyi okudu merak ediyorsanız.

0

Andrea Tagliasacchi, Neden?

Yalnızca 1000'lerce noktaya ve olası 100'lü düzlemlere bakıyorsanız, ana hatlarıyla belirtilen yöntemi kullanmanın yararı olur muydu? Onbaşı Dokunuşum'u belirtildiği gibi, nokta ve düzlemin nokta üretimine verildiği gibi.

Ayrıca piksellerin sınırlı yapısı nedeniyle genellikle iki veya daha fazla nokta dokudaki aynı piksele yansıtacaktır.

Eğer hala bunu yapmak istiyorsanız, C++ 'da örnek bir glut programında çalışabilirim, ancak bu Bilmiyorum gibi MATLAB ile nasıl yardımcı olur.

+0

Hala nasıl daha hızlı olabileceğini görmüyorum, hesaplamalar hala yapılmalı. :) Belki de bunun dahili olarak nasıl yapıldığını biliyor musun? – Sarien

0

Bana öyle geliyor ki, Onbaşı Touchy'nin yöntemine benzer bir şeyi bir for döngüsünden ziyade bir köşe programı yerine getirebilmelisiniz, değil mi? Belki de CUDA gibi GPU programlama için bir C API kullanın?