2012-10-10 34 views
10

C++ (vs2008) içindeki openGl kullanarak 3d nokta bulut ekranında biraz yönelme gerekir. Bir doku ile bir 3d nokta bulutu ekran yapmaya çalışıyorum. Her noktanın x, y, z değerini gösteren 3 adet 2B dizim var (her biri 1024x512). Benopengl 3d nokta bulutu x, y, z 2d dizisinden render

glBegin(GL_POINTS); 
for(int i=0; i<1024; i++) 
{ 
    for(int j=0; j<512; j++) 
    { 
     glVertex3f(x[i][j], y[i][j], z[i][j]); 
    } 
}  
}  
glEnd(); 

ile doğru yolda olduğumu düşünüyorum Şimdi bu tampon (Bence) tüm köşeleri yükler ama buradan ben nasıl devam etmek emin değilim. Yoksa tamamen yanlış buradayım.

Ardından, 3B nokta bulutu ve görünümünde doku olarak kullanmak istediğim renk verilerini (0-255 değerleri) içeren başka bir 2B dizi (aynı boyut) var.

+0

Her nokta için RGB kullanmıyorum, bu yüzden glColor3 kullanamıyorum * (r, g, b). Son nokta (0-255 değerleri ile) 3D nokta bulutu için dokularımı kullanıyorum. GlBegin'den (GL_POLYGON) aldığım bir örgü oluşturmayı mı öneriyorsunuz ???? Yine soru, yukarıda sahip olduğum şeyden nasıl ilerleyeceğimiz. YA DA Tamamen yanlış yöne gidiyorum. – user1733628

+0

Yukarıdaki kod, temel olarak 3 koordinat dizilerinden bir nokta bulutu çizecektir. Doldurulmuş gerçek bir "tampon" yoktur, doğrudan doğrudan modda çizersiniz. Renkler için: Anladığım kadarıyla, vertex başına bir işaretsiz bayt değeri var mı? Yani bu değerlerin bazı renkleri nasıl temsil ettiğini tanımlamalısınız. Onları yoğun olarak kullanabilirsin, ya da bir paleti ya da tamamen farklı bir şey kullanabilirsin. – derhass

cevap

2

Nokta çizim kodu olduğu gibi iyidir.

(Uzun vadede, bu noktaları tekrar tekrar çizmeniz gerekiyorsa, performans sorunları yaşayabilirsiniz, görünümü döndüren kullanıcıya yanıt olarak söyleyin. Verileri 3 diziden 1'e x, y, z değerleri ile yeniden düzenleyin. her biri daha hızlı köşe dizileri/VBO'ları kullanmanıza izin verir. Fakat şimdilik, eğer kırılmazsa, düzeltmeyin.)

Noktaları renklendirmek için, her glVertex'ten önce glColor'a ihtiyacınız vardır. Daha önce olmamalı, daha önce olmamalı, çünkü OpenGL glVertex'te gevşek bir şekilde tam bir vertex demektir, çizin. Verileri nokta bulutu olarak tanımladınız, bu yüzden glBegin'i GL_POLYGON olarak değiştirmeyin, GL_POINTS olarak bırakın.

Tamam, bir bayt renk dizin değeri olan başka bir diziniz var. Sadece siyahtan beyaza değişen noktaları göstermelidir hangi

glColor3ub(color[i][j], color[i][j], color[i][j]); 

ile gri tonlama seviyesi olarak bu kullanarak başlayabiliriz.

Her bir nokta için gerçek rengi elde etmek için, bir renk arama tablosuna ihtiyacınız var - Verilerle birlikte gelen veya oluşturduğunuz biri varsayar. Bu

static GLfloat ctab[256][3] = { 
    1.0, 0.75, 0.33, /* Color for index #0 */ 
    ... 
}; 

gibi bir şey ilan ve

glColor3fv(ctab[color[i][j]]); 

ile glVertex önce kullanılmalıdır ben ettik kullanılan OpenGL bugünlerde dahili olarak kullandığı çünkü nokta Uçan renkler. Renkler için 0..255 değerlerini tercih ederseniz, diziyi GLubyte ve glColor3fv'yi glColor3ub olarak değiştirin.

Bu yardımcı olur umarım.