Trazado gráfico dinámico con openGL en Android
Quiero trazar datos en tiempo real desde un dispositivo bluetooth. Tengo un dispositivo Bluetooth al que el teléfono se conectará y leerá los datos procedentes de él. Los datos son niveles de voltaje de algunos sensores y tienen una velocidad de muestreo de 300 muestras por segundo. La mayoría de las librerías de trazado (como aiChart, Androidplot, achartengine, …) que he visto no pueden manejar esa cantidad de datos y repintar el gráfico. Así que miré en openGL y Android NDK y parece que podría ser capaz de gráfico utilizando cualquiera de estos con las tasas de muestreo que tengo. ¿Alguien tiene un código de ejemplo para el gráfico de línea openGL trazado en android / Java y / o muestra de código NDK?
- Android: aplica efectos de OpenGL a la cámara
- Programación Android Camera.PreviewCallback (con OpenGL y OpenCV)
- Está llamando libgdx SpriteBatch método de inicio y fin varias veces caro?
- Renderización de Android OpenGLES con C ++ y Java
- OpenGL (ES) - ¿Cuál es la diferencia entre frustum y ortho?
- Obtener las líneas de GL10 dibujo de imágenes junto a la otra, la solución?
- Vista previa de la cámara más rápida con OpenGL?
- DrawerLayout ListView no dibujado con GLSurfaceVer como contenido
- Adreno 220 GLSL bug
- NDK OpenGL indefinido referencia a glVertexPointer
- Buscando un método multiplataforma para gráficos básicos 2D / 3D para iOS y Android
- OpenGL ES 3.0. Textura de punto flotante
- Preservar el contenido del búfer tras eglSwapBuffers
Hicimos algo como esto simplemente creando una clase de matriz de puntos con varias páginas y dibujando en opengl con desplazamiento para que el punto actual esté siempre en el mismo lugar.
La idea de utilizar arreglos de tamaño fijo con un contador por separado, por lo que no están golpeando los problemas de asignación de memoria que causaría gc para poner en marcha Una vez que una página está llena, el ciclo a la siguiente página que muestra la antigua también. La idea es que si tienes 5 páginas, puedes escribir en una, mostrar las otras 3 y escribir por lotes la última en sqlite en una tarjeta SD en un hilo separado para poder extraer todos los datos más adelante.
Siempre y cuando sólo tiene un hilo escrito a la matriz puede salir con algo así como
arrayPoint[] p; .... int currentPos = 0; arrayPoint current = p[currentPos]; ..... while(.... if(current.end < current.max) { .... get datax and datay current.end++; current.x[current.end] = datax; current.y[current.end] = datay; } else { currentPos = getNextPos(); current = p[currentPos]; current.end = -1; // truncate the array without actually freeing or allocating mem ..... flip volatile bool to let other thread know its ok to get exclusive access to its data etc }
Su muy rápido y debe hacer lo que necesita. A continuación, puede imprimir como un punto en un lienzo o dibujar en opengl es
Espero que ayude.
- Diseño con fragmento y framelayout sustituido por otro fragmento y framelayout
- Compra en la aplicación de Android NullPointerException