OpenGL与3D开发-绘制2D图形

本文介绍了在Android中使用OpenGL ES绘制2D图形的关键类和接口,包括GLSurfaceView、GLSurfaceView.Renderer及其相关方法,如onSurfaceCreated、onDrawFrame和onSurfaceChanged。此外,还讲解了GL api的使用,如glEnable、glDisable、glClearColor等,以及如何通过glDrawArrays和glDrawElements渲染图元。
摘要由CSDN通过智能技术生成

绘制2D图形

1、OpenGL ES在Android中涉及的关键类

Android框架中有两个基础类,可让我们使用OpenGL ES API创建和操作图形:GLSurfaceView和 GLSurfaceView.Renderer。

1.1、GLSurfaceView

GLSurfaceView从Android 1.5(API level 3)开始加入,继承自SurfaceView,实现了SurfaceHolder.Callback2接口,拥有SurfaceView的全部特性,也有view所有的功能和属性,特别是处理事件的能力,它主要是在SurfaceView的基础上它加入了EGL的管理,并自带了一个GLThread绘制线程(EGLContext创建GL环境所在线程即为GL线程),绘制的工作直接通过OpenGL在绘制线程进行,不会阻塞主线程,绘制的结果输出到SurfaceView所提供的Surface上,这使得GLSurfaceView也拥有了OpenGL ES所提供的图形处理能力。

1.2、GLSurfaceView.Renderer 接口

GLSurfaceView.Renderer 接口定义了使用 OpenGL 绘图时所需的方法。该接口通过 GLSurfaceView.setRenderer() 与 GLSurfaceView 关联在一起

GLSurfaceView.Renderer 定义了一个统一图形绘制的接口,它定义了如下三个接口函数:

⭐️ onSurfaceCreated(GL10 gl, EGLConfig config):当创建 GLSurfaceView 对象后,该方法被系统调用一次。通常在该方法中设置 OpenGL 环境的相关参数,初始化 OpenGL 图形对象等,执行一些无须改变的初始化操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

⭐️ onDrawFrame(GL10 gl):GLSurfaceView 对象每一次重绘时系统都会调用该方法。该方法应该执行具体的绘图工作。

⭐️ onSurfaceChanged(GL10 gl, int width, int height):当 GLSurfaceView 对象的几何外形改变时,包括 GLSurfaceView 的尺寸发生改变、设备屏幕的方向发生改变等情况,该方法被系统调用。

在这里插入图片描述

1.3、 GL api 调用

GL10就是OpenGL ES的绘图接口,但实际上也是GL11的实例,可通过(gl Instansof GL11)判断它是否为GL11接口的实例。

⭐️ glEnable(int cap)启用服务器端GL功能。glEnable方法和glDisable方法可以启用和禁止各种功能,各种功能(除了GL_DITHER和GL_MULTISAMPLE)的初始值为GL_FALSE。

⭐️**glDisable(int cap):**禁用服务器端GL功能。例如,要关闭抗抖动功能,可以使用gl.glDisable(GL10.GL_DITHER);

例如:

  • GL_ALPHA_TEST 如果启用,将进行alpha 测试

  • GL_DEPTH_TEST 如果启用,将进行深度测试;就是让OpenGL ES负责跟踪每个物体在Z轴上的深度,这样就可避免后面的物体遮挡前面的物体。

  • GL_BLEND 如果启用,将引入的值与颜色缓冲区中的值混合

⭐️**glHint (int target, int mode):**该方法用于对OpenGL ES某方法进行修正。

⭐️ glClearColor (float red, float green, float blue, float alpha):用于指定清除屏幕时使用的颜色,4个参数分别用于设置红、绿、蓝和透明度的值,值的范围是0.0f~1.0f。例如设置gl.glClearColor(0 , 0 , 0 , 0):就是用黑色“清屏”。

⭐️ **glShadeMode(int mode):**该方法用于设置OpenGL ES的着色。

⭐️glViewport(int x , int y , int width , int height):设置3D视窗的位置与大小。其中前两个参数指定该视窗的位置,后两个参数指定该视窗的宽、高。

⭐️ glMatrixMode (int mode)😗***设置视图的矩阵模型。通常可接受GL10.GL_PROJECTION、GL10.GL_MODEVIEW两个常量值。

当调用glMatrixMode(GL10.GL_PROJECTION):代码后,指定将屏幕视为透视图(要想看到逼真的三维物体,这是必要的),这意味着越远的东西看起来越小;当调用glMatrixMode(GL10.GL_MODEVIEW):代码后,即将当前矩阵模式设为模型视图矩阵,这意味着任何新的变换都会影响该矩阵中的所有物体。

⭐️**glLoadIdentity():**相当于reset()方法,用于初始化单位矩阵。

⭐️ **glFrustumf (float left , float right , float bottom , float top , float zNear , float zFar):**用于设置透视投影的空间大小。前路两个参数用于设置X轴上的最小坐标值、最大坐标值;中间两个参数用于设置Y轴上的最小坐标值、最大坐标值;后面两个参数用于设置Z轴上所能绘制的场景的深度的最小值、最大值。

⭐️ glClear (int mask):清理缓冲区,并设置为预设值。

glClear可以使参数为多个值按位与后的结果,以表明那个缓冲区需要清理。有如下值:

🌵 GL_COLOR_BUFFER_BIT:表明颜色缓冲区。

🌵 GL_DEPTH_BUFFER_BIT:表明深度缓冲区。

🌵 GL_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值