Estoy escribiendo un programa en C++ que adquiere datos de puntos de 4 dimensiones sobre un socket UDP y luego traza los datos en 6 gráficos de dispersión 2D por separado. Por ejemplo, si nombramos las dimensiones: A, B, C, D, los seis gráficos 2D serían AxB, AxC, AxD, BxC, BxD y CxD. En el transcurso de unas pocas horas, el programa acumula ~ 50K puntos.La mejor manera de dibujar un diagrama de dispersión con muchos puntos de datos en C++ usando OpenGL
Actualmente trazado cada punto una vez, usando el modo inmediato. No elimino el búfer entre las llamadas al sorteo, por lo que los puntos previamente graficados persisten hasta que se borre el búfer. No estoy contento con este método ya que el modo inmediato es lento y obsoleto. Cuando tengo que borrar el búfer, como cuando una ventana cambia de tamaño, pierdo todos los datos graficados previamente. Me gustaría encontrar una solución que permita la persistencia de los datos una vez que se borre el buffer. Además, sería bueno si la trama pudiera escalarse fácilmente con los tamaños de ventana también.
He pensado en mantener una matriz de vértices (con 2 dimensiones) para cada sistema de coordenadas, pero eso requeriría 6 matrices separadas y requeriría 3 veces la memoria de mantener una matriz con las 4 dimensiones.
¿Estoy pensando en esto de la manera correcta? ¿Cuál es la solución adecuada para este problema?
El objetivo final es tener una aplicación que muestre los datos lo más cerca posible en tiempo real.
Editar ¿Sería posible seguir trazando los puntos uno por uno a medida que entran, y cuando tengo que cambiar el tamaño de la pantalla tomar una imagen de la pantalla y luego mostrar una versión de tamaño de esa imagen?
Los VBO deben ser al menos no más lentos que los arrays del lado del cliente y son definitivamente más rápidos que el modo inmediato. La VBO (y las matrices de vértices en general) no son solo para la copia de memoria sino también para la sobrecarga del controlador. –
Uno probablemente podría salirse con la suya variando los argumentos 'stride' y' pointer' a 'glVertexPointer' en lugar de tener que tener sombreadores de vértices diferentes para las diferentes vistas. – user786653
@Christian Gracias por tu comentario, no estaba seguro. – neodelphi