ranchohxk / LearnGLES

Android OpenGLES 实例

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LearnGLES

介绍

这个项目用来记录学习 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 应用程序的框架):

  1. OpenGLES 版本有2.0 改为 3.0
  2. 构建 GLBaseApp 作为 app 的基类, GLBaseApp 提供了 Initialize() Render()Shutdown 回调接口,子类可通过这三个方法实现具体的功能。Initialize() 在应用启动是被调用, Render() 在应用的主循环里被重复调用,Shutdown在应用退出时被调用。
  3. 在框架中使用 CreateGLApp 创建 app 实例, 在应用启动时调用 app 的 Initialize(), 主循环里面重复调用 app 的 Render(), 在结束时调用 app 的 Shutdown()
  4. 仅保留 armeabi armeabi-v7a arm64-v8a 三个ABI (去掉x86,mips等)
  5. 链接库使用 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 材质(光照/镜面反射)
0020_gl_light_directional.cpp 平行光照
0021_gl_light_point.cpp 点光源-随距离衰减
0022_gl_light_spot.cpp 聚光灯

About

Android OpenGLES 实例


Languages

Language:C++ 83.7%Language:C 13.9%Language:Objective-C 1.4%Language:GLSL 0.7%Language:CMake 0.2%Language:Python 0.0%Language:Batchfile 0.0%