这个项目用来记录学习 OpenGLES 的一些点滴, Android 平台。 主要参考 https://learnopengl.com
使用 https://github.com/googlesamples/android-ndk/tree/master/native-activity 作为基础框架,这个基于Android 的 NativeActivity, 并使用native_app_glue 库(用来封装Activity 生命周期相关回调),这个工程本身基于 Android NDK 实现 OpenGLES 应用的框架。
我对这个框架进行了一些修改(然后作为自己实现 OpenGLES 应用程序的框架):
- OpenGLES 版本有2.0 改为 3.0
- 构建
GLBaseApp
作为 app 的基类,GLBaseApp
提供了Initialize()
Render()
和Shutdown
回调接口,子类可通过这三个方法实现具体的功能。Initialize()
在应用启动是被调用,Render()
在应用的主循环里被重复调用,Shutdown
在应用退出时被调用。 - 在框架中使用
CreateGLApp
创建 app 实例, 在应用启动时调用 app 的Initialize()
, 主循环里面重复调用 app 的Render()
, 在结束时调用 app 的Shutdown()
- 仅保留 armeabi armeabi-v7a arm64-v8a 三个ABI (去掉x86,mips等)
- 链接库使用 GLESv3, 去掉 GLESv1_CM。
计划是创建很多个 OpenGLES 示例, 每个示例会创建一个 GLESApp
来实现。每个 GLESApp
继承自 GLBaseApp
并在 Render()
方法里面实现具体的功能代码。
- Android SDK
- Android NDK
编译: ./buildDebug.bat
安装: ./installDebug.bat
示例代码文件 | 功能介绍 | 截图 |
---|---|---|
001_gl_color_app.cpp | 为整个屏幕填充一种颜色(红色) | |
002_gl_point_app.cpp | 画一个点(可控制大小) | |
003_gl_lines_app.cpp | 画线(GL_LINES) | |
003_gl_lines_app.cpp | 画线(GL_LINE_STRIP) | |
003_gl_lines_app.cpp | 画线(GL_LINE_LOOP) | |
004_gl_triangle.cpp | 画三角形(GL_TRIANGLES) | |
004_gl_triangle.cpp | 画三角形(GL_TRIANGLE_STRIP) | |
004_gl_triangle.cpp | 画三角形(GL_TRIANGLE_FAN) | |
005_gl_regular_polygons.cpp | 画任意正多边形 | n=12 |
006_gl_cube_app.cpp | 立方体(透视投影) | |
007_gl_texture.cpp | 绘制一张纹理 | |
008_gl_texture2.cpp | 混合两张纹理 | |
009_gl_texture3.cpp | 混合两张纹理(动态变化) | |
0010_gl_transform.cpp | 矩阵变换(平移/旋转/放缩) | |
0011_gl_transform2.cpp | 矩阵变换(动态:平移/旋转/放缩) | |
0012_gl_coordinate.cpp | 坐标系变换 | |
0013_gl_coordinate.cpp | 相机移动 (旋转) | |
0014_gl_light.cpp | 光照 | |
0015_gl_diffuse.cpp | 漫反射 | |
0016_gl_specular.cpp | 镜面反射 | |
0017_gl_material.cpp | 材质(光照) | |
0018_gl_light_maps.cpp | 材质(光照/漫反射) | |
0019_gl_light_maps_specular.cpp | 材质(光照/镜面反射) |