Android OpenGL ES系列目录

734 阅读2分钟

本系列文章主要是基于LearnOpenGL和对应的中文教程

本系列文章的示例代码在opengl-android里。

入门篇

Android OpenGL ES:OpenGL

Android OpenGL ES:创建窗口

Android OpenGL ES:三角形

Android OpenGL ES:着色器

Android OpenGL ES:纹理

Android OpenGL ES:变换

Android OpenGL ES:坐标系统

Android OpenGL ES:摄像机

光照篇

Android OpenGL ES:颜色

Android OpenGL ES:基础光照

Android OpenGL ES:材质

光照篇剩余几篇示例代码已提交,后续将会更新...

与原教程差异

与原教程主要的差异是:

  • 示例代码尽可能地替换成了类似的Java实现。
  • 该系列不再是运行在PC端,而是运行在Android设备上,需要鼠标的一些操作,也替换成了触屏操作。
  • 该系列是在原教程和对应的中文教程的基础上,做了一些增删、改动,大致按原教程的流程来讲述OpenGL ES。OpenGL ES是OpenGL三维图形API的子集,针对手机和游戏主机等嵌入式设备而设计,与OpenGL在使用细节上有一些差异。
  • 暂不提供原教程后面的习题及答案,感兴趣的自行翻阅原教程或者对应的中文教程。

值得注意的是,OpenGL ES本质上还是一个C库。虽然Android对OpenGL ES进行了一定的封装,提供了对应的Java API,但是很多OpenGL相关的库,没有对应的Java接口,比如模型加载库Assimp。所以,在C/C++层,使用OpenGL ES是更推荐的,性能也更好一点(减少很多不必要的JNI调用)。但考虑到多数的Android应用开发不擅长C/C++,所以本系列尽量采用Java。

其他

本系列文章,暂时只完成了入门篇和光照篇。

目前卡在了模型篇:Assimp虽然在github上找得到对应的Kotlin实现,但在Android上是运行不起来的,因为它使用了一些Android不支持的Java类。

解决思路有两种:

  • 拉取Kotlin实现的assimp,进行改动(尝试过一下,改动比较麻烦,并且该库已经很久不更新,而C/C++实现的assimp一直在维护、更新,遂放弃)
  • 使用C/C++实现的assimp,为Android平台编译对应的so,并封装对应的JNI调用。