c++ opengl 3d point-clouds

c++ - opengl 3D nube de puntos render de x, y, z 2d matriz



point-clouds (1)

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 arrays a 1 con valores x, y, z uno junto al otro permitiría usted puede 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.

OK, tienes otra matriz con valores de índice de color de un byte. Puedes comenzar usando solo eso como un nivel de escala de grises con

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

que debería 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. Debería ser declarado algo así como

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

y utilizado antes del glVertex con

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

He usado colores de punto flotante porque eso es lo que OpenGL usa internamente estos días. Si prefiere 0.255 valores para los colores, cambie la matriz a GLubyte y glColor3fv a glColor3ub.

Espero que esto ayude.

Se necesita una cierta dirección en la visualización de la 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 con

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 esto carga todos los vértices en el búfer (creo) pero desde aquí no estoy seguro de cómo proceder. O estoy completamente equivocado 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.