本系列文章主要是基于LearnOpenGL和对应的中文教程。
本系列文章的示例代码在opengl-android里。
入门篇
光照篇
光照篇剩余几篇示例代码已提交,后续将会更新...
与原教程差异
与原教程主要的差异是:
- 示例代码尽可能地替换成了类似的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调用。