2012-10-10 39 views
10

Necesita una cierta dirección en la visualización de nube de puntos 3d usando openGl en C++ (vs2008). Estoy tratando de hacer una pantalla de nube de puntos 3D con una textura. Tengo 3 matrices en 2D (cada una del mismo tamaño 1024x512) que representan x, y, z de cada punto. Creo que estoy en el camino correcto conopengl nube de puntos 3D render de x, y, z matriz de 2d

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(); 

Ahora bien, esta carga todos los vértices en la memoria intermedia (creo) pero desde aquí no estoy seguro de cómo proceder. O estoy completamente mal aquí.

Luego tengo otra matriz 2D (del mismo tamaño) que contiene datos de color (valores de 0-255) que quiero usar como textura en la nube de puntos 3D y la pantalla.

+0

No tengo RGB para cada punto, así que no puedo usar glColor3 * (r, g, b). Estoy intentando usar la última matriz (con 0-255 valores) como mi textura para la nube de puntos 3D. Desde glBegin (GL_POLYGON) supongo que estás sugiriendo crear una malla ??? Una vez más, la pregunta es cómo progresar de lo que tengo arriba. O voy en dirección completamente equivocada. – user1733628

+0

Bueno, el código anterior básicamente dibujará una nube de puntos de tus 3 arreglos de coord. No hay un "buffer" real que esté lleno, dibujará directamente en modo inmediato. Para los colores: según tengo entendido, ¿tiene un valor de byte sin signo por vértice? Por lo tanto, debe definir cómo estos valores representan algunos colores. Podría usarlos directamente como intensidad, o podría usar una paleta, o algo completamente diferente. – derhass

Respuesta

2

El código de dibujo de puntos está bien tal como está.

(A largo plazo, puede tener problemas de rendimiento si tiene que dibujar estos puntos repetidamente, por ejemplo, en respuesta al usuario que gira la vista. Reordenar los datos de 3 matrices a 1 con valores x, y, z junto a unos a otros le permitirían usar matrices de vértices/VBO más rápidos. Pero por ahora, si no está roto, no lo arregle).

Para colorear los puntos, necesita glColor antes de cada glVertex. Tiene que ser antes, no después, porque en OpenGL glVertex significa vagamente que es un vértice completo, dibujarlo. Ha descrito los datos como una nube de puntos, por lo que no cambie glBegin a GL_POLYGON, déjelo como GL_POINTS.

Bien, tiene otra matriz con valores de índice de color de un byte. Se podría empezar sólo por el uso que como un nivel de escala de grises con

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

que debe mostrar los puntos que varían de negro a blanco.

Para obtener el color verdadero para cada punto, necesita una tabla de búsqueda de colores; supongo que hay uno que viene con los datos, o uno que está creando. Debe ser declarada algo así como

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

y se utiliza antes de la glVertex con

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

he utilizado colores de punto flotante porque eso es lo OpenGL utiliza internamente en estos días. Si prefiere 0.255 valores para los colores, cambie la matriz a GLubyte y glColor3fv a glColor3ub.

Espero que esto ayude.

Cuestiones relacionadas