Cómo dibujar puntos usando OpenGL ES 2.0 en Android
OpenGLES es algo frustrante. Tienes que usarlo para hacer 3D en tu teléfono Android. Permítanme compartir algunas notas que tomé aquí: Introducción a Android OpenGLES 20011-6-3 El sistema Android utiliza la interfaz estándar OpenGL para admitir funciones de gráficos 3D. El sistema de gráficos android3D también se divide en dos partes: marco Java y código local. El código local implementa principalmente la biblioteca de interfaz OpenGL. En la capa de marco de Java, javax.microedition.khronos.opengles es el paquete OpenGL estándar de Java. El paquete android.opengl proporciona la conexión entre el sistema OpenGL y el sistema AndroidGUI. El código local de Android se encuentra en frameworks/base/opengl, el código JNI se encuentra en frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp y frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp, y la clase java se encuentra en opengl/java/javax /microedition/khronos para pruebas locales El código se encuentra en frameworks/base/opengl/tests. Incluyendo angeles, fillrate y otros 14 códigos de prueba, estos códigos se pueden probar localmente a través del terminal (adbshell se usa en el simulador). La operación de canalización fija OpenGLES1.x admite funciones como glVertexPointer (), pero no es compatible con GLSL. El archivo de encabezado está en el directorio GLES de ndk y el archivo de biblioteca es libGLESv1_CM.so. Las operaciones de canalización programables de OpenGLES2.x no son compatibles con 1.x y no admiten operaciones de canalización fijas, como glVertexPointer() y otras funciones. Soporta GLSL (también debe programarse con esto). El archivo de encabezado está en el directorio GLES2 de ndk y el archivo de biblioteca es libGLESv2.so. OpenGLES Learning 2011-6-30OpenGL define sus propios tipos de datos. Debe ceñirse a estos tipos de datos OpenGL para garantizar la portabilidad y la eficiencia. OpenGLES actualmente no admite tipos de datos de 64 bits. OpenGLES sólo admite triángulos. OpenGLES solo admite funciones que comienzan con gl y la biblioteca glu no las admite. Funciones eliminadas por OpenGLES de OpenGL: 1.glBegin/glEnd2.glArrayElement3 Lista de visualización 4. Evaluador 5. Modo de color indexado 6. Plano de recorte personalizado 7. glRect 8. Procesamiento de imágenes (esto no está disponible en tarjetas gráficas generales, FireGL/Quadro). La tarjeta gráfica tiene) 9. Búfer de retroalimentación 10. Búfer de selección 11. Búfer de acumulación 12. Bandera de límite 13. glPolygonMode14.GL_QUADS, GL_QUAD_STRIP, GL_POLYGON15.glPushAttr ib, glPopAttrib, glPushClientAttrib, glPopClientAttrib16.TEXTURE_1D, TEXTURE_3D, _RECT, TEXTURA_ CUBE_MAP17.GL_COMBINE18. Generación automática de coordenadas de textura 19. Límite de textura 20. GL_CLAMP, GL_CLAMP_TO_BORDER 21. Representación de textura que desaparece 22. Limitación de LOD de textura 23. Limitación de preferencia de textura 24. Compresión y descompresión automática de textura 25. glDrawPixels, glPixelTransfer, glPixelZoom26.glReadBuffer, glDrawBuffer, glCopyPixelsOpenGLES2.020 11 -10- 92.0 y 1.1 no son compatibles.
-El archivo de encabezado utilizado por -2.0 es el directorio GLES2 en el directorio de inclusión de ndk, incluidos gl2.h, gl2ext.h, gl2platform.h, mientras que 1.1 usa el directorio GLES. -El archivo de biblioteca utilizado por -2.0 es libGLESv2.so en el directorio lib de ndk, mientras que 1.1 usa libGLESv1_CM.so. -Muchas funciones de 1.1 han sido canceladas en 2.0, como glMatrixModel y glLoadIdentity. Lenguaje de sombreado OpenGL (GLSL - OpenGLShadingLanguage): para utilizar 2.0, debe aprender este idioma. Porque se han cancelado muchas funciones 1.1. san-angelesNDKOpenGLES1.1 programa de ejemplo 2012-3-8 SanAngeles, consulte Wikipedia, es un concepto ficticio de ciudad futura ubicada en el sur de California. Aparece a menudo en películas y proviene de Los Ángeles y San Diego. El efecto de demostración de este programa es observar una ciudad magnífica, el suelo es un espejo con reflejos de edificios y una nave espacial vuela sobre la ciudad. Hay 5 o 6 puntos de observación en la parte delantera y trasera, y la cámara sigue moviéndose en cada punto de observación. En este ejemplo, se utiliza NDK (C++) para llamar a OpenGLES1.1 para dibujar la ciudad de SanAngeles. Básicamente todos usan NDK y solo hay un programa Java. Utilice vc2005 para demostrarlo, con el fin de comprender algunos detalles mediante el seguimiento del código. El método es: - Copie todos los archivos .h en jni, así como demo.c, app-win32.c, colóquelos en un directorio especial y luego transfórmelos para usar OpenGL en lugar de ES. (O simplemente elimine una sección grande del código de dibujo para asegurarse de que se complete la compilación). Primero analice el código Java: DemoActivity.java. Este es el único archivo Java. Requiere principalmente las siguientes 4 interfaces jni: -privatestaticnativevoidnativeInit();/. /Initialization-privatestaticnativevoidnativeResize (intw,inth);-privatestaticnativevoidnativeRender();//Dibujar 1 cuadro-privatestaticnativevoidnativeDone(); en segundo lugar, analice el código C++ app-android.c-Primero, se llama a importGLInit() para importar dinámicamente la biblioteca OpenGL. . -En segundo lugar, se llama a appInit() para crear una colección de objetos 3D independiente de la plataforma en la memoria. El método de creación consiste en utilizar una matriz para generar muchos triángulos de forma similar a dibujar un círculo y elevarlo. -Luego, llame a appRender() en cada ciclo de reloj, los detalles son: -prepareFrame(ancho,alto);//Prepare el marco de dibujo de OpenGLES. De hecho, significa borrar los buffers de color y profundidad, y restablecer las matrices de proyección y modelo. -camTrack();//Calcula la posición, orientación y distancia focal de la lente en el ciclo de reloj actual. Luego llame a gluLookAt para lograrlo. -configureLightAndMaterial();//Establece la fuente de luz y el material -drawModels(-1);//Dibuja el reflejo primero (en realidad, dibuja el eje z de todos los modelos al revés) -El primer bucle es para dibujar objetos delicados- El segundo El bucle es para dibujar objetos en movimiento -drawGroundPlane();// Luego dibuja el suelo similar a un espejo. Aclare antes de pintar, active la difuminación y pinte. Restaurar el estado después del dibujo. -drawModels(1);//Dibuja todos los modelos nuevamente -drawFadeQuad();//Finalmente dibuja el cuadro de desvanecimiento y usa la fusión para dibujar un cuadro 2D que cubra toda la ventana gráfica. El coeficiente de fusión está relacionado con el tiempo.