之前在高星的带动下做过一些opengl,后来和他一起做了模型细化之后就没继续下去了。上次徐学鹏回来又聊起了opengl,他说4.0版本变化很大,我还问高星来着,高星说也不是,一次性传递给gpu在4.0以前的版本就可以做了。
Anyway,我不能在这样堕下去了,高星原来都不怎么做软件的,·去美国没几个月就进步这么多,徐学鹏就更别提了,加拿大的开放学习环境和丰富的学习资源完全让他如鱼得水。我再继续原地踏步以后都没脸见他们了。
还好,毕业设计选了android平台信息收集,相比windows,是个新东西了,终于又唤起我学习的兴趣。之前大概熟悉了下android的开发环境,做了几个tutorial,都不是那么得心应手,想了下,还是做图像吧,这个我更感兴趣些。于是就开始在android上写opengl。
android的环境配置就不说了,比较简单,而且我喜欢拿着我的htc实机测试。opengl的配置就更简单了,我用的android 2.3,完全支持opengl,甚至不需要像windows里面配套一个glut.dll,引入两个包就好了:
import android.opengl.GLU;
import android.opengl.GLSurfaceView.Renderer;
然后是几个我经常混淆的函数,首先是gl.glViewport(0, 0, w, h);会英语的都知道是设置视口的,但是TM的什么是视口我老是搞忘。记一下,其实就是窗口。
接着是一个常用的流程,先用gl.glMatrixMode()设置欲操作的矩阵。引用红苹果的一段话:
OpenGL里面的操作,很多是基于对矩阵的操作的,比如位移,旋转,缩放,所以,这里其实说的规范一点就是glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标,GL_PROJECTION是对投影矩阵操作,GL_MODELVIEW是对模型视景矩阵操作,GL_TEXTURE是对纹理矩阵进行随后的操作。
设置完以后,一般要重置矩阵:gl.glLoadIdentity();
完了以后就可以实施实际的操作,比如,之前是
gl.glMatrixMode(GL10.GL_PROJECTION);
对投影矩阵进行操作的。那么,接下来,可以设置透视:
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, ((float) w) / h, 0.1f, 10f);
如果参数是GL_MODELVIEW,则可以用glulookat()。
另外备注下gluPerspective()的功能,gluPerspective specifies a viewing frustum into the world coordinate system. 其实说的很好,就是个锥台,百科里面有这个图。
最后是glOrtho()。Ortho是正交的意思,我理解就是垂直的分割,而不像gluPerspective()那样的锥形,这个以后实验多了再看。
好吧,opengl的东西先复习这么多。
格式被我搞乱了。。。可是不知道怎么改回来,只能凑合了

作者分享了自己在Android平台上使用OpenGL进行图像处理的经验。从环境配置到常用函数介绍,包括视口设置、矩阵操作等,为初学者提供了实用指导。
833

被折叠的 条评论
为什么被折叠?



