1.OPenGL简述
OPenGL(Open Graphics Library):开放图形接口,是一套跨编程语言,跨平台的编程接口规范,主要用于三维图形编程(二维也可以)。
但是三维图形的计算需要处理大量的数据,所以OpenGL不适于应用在小型设备上如手机。
OpenGL ES(OpenGL for Embedded System)是 OpenGL的一个子集,它是为嵌入式系统如(手机,汽车,家电等)而专门设计的OpenGL的子集。我们接下来要说得就是OpenGL ES。
OpenGl ES剔除了OpenGL中对四边形和多边形的支持,只能通过绘制三角形组成3D图形。
2.准备
先来看adnroid开发中常用的坐标系:
但是在这里我们不需要这个,请先把上面这个坐标系暂时忘记。
我们需要的坐标系是下面这个:
每个顶点的位置由(x,y,z)组成。而一个3D图形需要很多个点。
注意:朝手机屏幕里面才是z轴正方向,不然后面有些错误
3.使用
Android为 OPenGL ES支持提供了GLSurfaceView组件用于显示3D图形,但其本身不绘制3D图形,绘制是由GLSurfaceView.Renderer来完成3D图形绘制。
在Android中使用OpenGL ES步骤如下:
- 1.创建GLSurfaceView组件,用于显示绘制的图形
GLSurfaceView glView = new GLSurfaceView(this);
你会去创建一个没有被修改的GLSurfaceView实例,但是有时候不建议这样去做,因为你需要扩展这个类来捕获触摸的事件。
- 2.创建GLSurfaceView.Render 内容绘制器,但是需要重写三个方法。
MyRenderer myRenderer = new MyRenderer(); //MyRenderer继承Renderer重写3个方法
- 3.为GLSurfaceView设置绘制器
glView.setRenderer(myRenderer);
重写的3个方法如下:
- onSurfaceCreated(GL10 gl , EGLConfig config):创建GLSurfaceView时,系统调用一次该方法。使用此方法执行只需要执行一次的初始化操作。
- onDrawFrame(GL10 gl):系统在每次重画GLSurfaceView时调用这个方法。使用此方法作为绘制(和重新绘制)图形对象的主要执行方法。
- onSurfaceChanged(GL10 gl , int width , int height):当GLSurfaceView发生变化时,系统调用此方法,这些变化包括GLSurfaceView的大小或设备屏幕方向的变化。常用来初始化3D场景。
其中的形参GL10代表了OpenGL ES的绘制画笔,当用Renderer绘制3D图形时,其实是调用GL10的方法来进行绘制。