OpenGL ES入门介绍

目录

1.OpenGL ES的简介

2. 基本流程和概念

2.1 渲染的基本流程

2.2 管线

2.3 顶点

2.4 纹理

2.5 顶点着色器(VertexShader)

2.6 图元装配

2.7 光栅化

2.8 片段着色器(FragmentShader)

2.9 逐片段操作


        第一次接触OpenGL ES是两年前,但是看到OpenGL中各种专业名词和专业术语,感觉云里雾里,虽然按照书中的介绍实现了效果,但是终究还是没有理解。这个系列我们一起对OpenGL ES进行重新学习实践,掌握OpenGL ES 3.0,编写迷人的OpenGL ES 3.0的程序。

下面开始今天的主题。

1.OpenGL ES的简介

OpenGL(Open Graphics Library)是一个跨平台图像程序接口,用于二维和三位图片的渲染。OpenGL ES(Open Graphic Library Embedded Systems)是OpenGL的一个子集,用于手机和嵌入式设备

 在android中对OpenGL ES的支持如下

1. OpenGL ES 2.0 支持android2.2以后的版本

2. OpenGL ES 3.0 支持android4.3以后的版本

3. OpenGL ES 3.1 支持android5.0以后的版本

    基于目前android系统占比分布和OpenGL ES的版本使用趋势,我们基于OpenGL ES3.0进行学习实践。

**有个问题:OpenGL ES在整个系统中的作用是什么?**

通过下面两种图我们可以看到OpenGL ES是CPU和GPU交互的桥梁,是一个Lib


 

 图片来源 [OpenGL(一) OpenGL入门](https://www.jianshu.com/p/92208a75283d)


 

图片来源 [Android官方文档]

**那为什么需要OpenGL ES 这个桥梁呐?能不能CPU和GPU直接交互呐?**

将数据从一块内存复制到另一块内存中,传递速度是非常慢的,CPU主要处理逻辑控制,GPU在逻辑运算方面比较强大,可以高并行处理图形数据和复杂算法,我们对比看下CPU和GPU的内部结构


 

 图片来源 [OpenGL(一) OpenGL入门](https://www.jianshu.com/p/92208a75283d)
 

2. 基本流程和概念

OpenGL ES 3.0 实现了具有可编程着色功能的图形管线,有两个规范组成:OpenGL ES 3.0 API 和 GLSL着色器语言。在学习这些规范之前,我们先了解下相关的基本概念

2.1 渲染的基本流程

> OpenGL在处理Shader时,和其他编译器一样。通过编译、链接等步骤,生成了着⾊器程序(glProgram),着⾊器程序同时包含了顶点着⾊器和⽚段着⾊器的运算逻辑。在OpenGL进行绘制的时候,⾸先由顶点着⾊器对传⼊的顶点数据进行运算。再通过图元装配,将顶点转换为图元。然后进行光栅化,将图元这种⽮量图形,转换为栅格化数据。最后,将栅格化数据传入⽚段着⾊器中进行运算。⽚段着色器会对栅格化数据中的每⼀个像素进行运算,并决定像素的颜⾊。

2.2 管线

它是一系列数据处理的过程,将应用程序的数据最终转换到渲染的图像。下图展示了OpenGL ES 图形管线

图片来源:《OpenGL ES 3.0 编程指南》

2.3 顶点

OpenGL ES 的基本元素有点、线、三角形,就像盖钢架结构的房子一样,先确定好位置,搭出框架,OpenGL ES 也需要确定好位置即顶点

2.4 纹理

纹理通常是一张图片,也可以用来存储大量的数据,这些数据可以发送到着色器。我们这个章节了解下纹理作为一张图片的意义。

 **那么为什么需要纹理呐?**

 我们可以为每个顶点添加颜色来丰富图像的细节,如果想让图形开起来更加有趣真实,我们就必须有足够的顶点从而指定足够多的颜色,但这会产生很多额外开销。使用纹理可以避免这个问题

> 你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。

> 图片来源

> LearnOpenGL CN

下面是一张怀旧滤镜的纹理图

2.5 顶点着色器(VertexShader)

顶点着色器一般用来处理图形每个顶点的变换,例如 平移、缩放、旋转、投影等

 顶点着色器是OpenGL ES中用于计算顶点属性的程序,每个顶点都会并行的执行一次顶点着色器程序。

2.6 图元装配

图元(Primitive)是点、线、三角形等基本几何对象,图元的每个顶点被发送到顶点着色器处理,而图元装配就是把这些顶点做合成图元

2.7 光栅化

光栅化是把顶点数据转换为片元的过程。将有基本元素(点、线、三角形)组成的几何图元变为二维图像的过程。

 这个过程包含两部分内容

1. 确定视图坐标中哪些区域被基本图元占用

2. 分配一个颜色值和一个深度值到各个区域

2.8 片段着色器(FragmentShader)

片段着色器又叫片元着色器,用来处理图形中每个像素点颜色计算和填充

2.9 逐片段操作

在逐片段操作阶段,每个片段上会执行 像素归属测试、裁剪测试、模版和深度测试、混合、抖动

> 在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附着上的颜⾊进⾏混合,混合的算法可以通过OpenGL的函数进行指定。但是OpenGL提供的混合算法是有限的,如果需要更加复杂的混合算法,一般可以通过像素着色器进行实现,当然性能会⽐比原⽣的混合算法差一些.

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android OpenGL ES 3.0是一个强大的图形渲染API,用于开发Android平台上的高性能3D应用程序和游戏。从入门到精通OpenGL ES 3.0需要系统性的学习教程,以下是一个简要的学习路径: 1. 基础知识:首先需要了解OpenGL ES 3.0的基础知识,包括图形渲染管线、坐标系、顶点和片元着色器等。可以通过阅读相关的教程、书籍或者在线资源来获得这方面的知识。 2. 环境搭建:学习OpenGL ES 3.0之前,需要先搭建好学习环境。可以下载安装Android Studio和相关的开发工具,以及配置好OpenGL ES 3.0的开发环境。 3. 学习资源:寻找一些高质量的学习资源,如教程、书籍或者在线课程。可以选择一些经典的OpenGL ES 3.0教程,其中包括基础知识、实例代码和案例分析等。 4. 实践练习:学习OpenGL ES 3.0最重要的一点就是不断地进行实践练习。可以按照教程中的示例代码,逐步实现一些简单的图形渲染效果。通过实践来加深对OpenGL ES 3.0的理解,掌握各种绘制技术和渲染效果。 5. 深入研究:在掌握了基础知识和实践经验之后,可以进一步深入研究OpenGL ES 3.0的高级特性和扩展功能。包括纹理映射、着色器编程、光照和阴影效果等。可以参考一些专业书籍和高级教程来进一步提升自己的技术水平。 6. 项目实践:最后一步是通过实际项目的实践来巩固所学的知识。可以尝试开发一些简单的游戏或者应用程序,利用OpenGL ES 3.0来实现复杂的图形渲染效果。通过实际项目的经验,可以进一步提升自己的技术能力和解决问题的能力。 总之,学习Android OpenGL ES 3.0需要系统性的学习教程,并通过不断实践和项目实践来提升自己的技术水平。只有在不断学习和实践中,才能逐步精通OpenGL ES 3.0并运用到实际开发中。 ### 回答2: Android OpenGL ES 3.0 是一种强大的图形渲染技术,用于在Android设备上创建高性能的3D图形和特效。要系统地学习和掌握Android OpenGL ES 3.0,您可以按照以下步骤: 1. 学习基础知识:首先,您需要了解计算机图形学和OpenGL ES的基本概念。这包括了解3D图形渲染的原则、OpenGL ES的架构、状态机模型等。可以通过阅读相关的教材或者参考互联网上的优质教程来学习这些内容。 2. 编程环境设置:为了开始使用Android OpenGL ES 3.0,您需要配置开发环境。这包括安装和配置Android开发工具包(Android SDK)以及适当的集成开发环境(如Android Studio)。确保您的开发环境正确设置,并具备OpenGL ES 3.0的支持。 3. 学习OpenGL ES API:学习OpenGL ES 3.0的API是掌握该技术的关键。您需要理解OpenGL ES的基本绘图函数、顶点和片段着色器编程、纹理映射等概念。可以通过查阅OpenGL ES 3.0的官方文档或参考书籍来学习这些API。 4. 实践项目:通过实践项目来巩固所学的知识。您可以从最简单的项目开始,如画一个三角形,然后逐步扩展,添加更多的图形对象和特效。这样您可以深入了解OpenGL ES 3.0的使用和性能优化。 5. 学习高级主题:一旦掌握了基础知识,您可以进一步学习OpenGL ES 3.0的高级主题。这可能包括光照、阴影、投影、深度测试和其他高级特性。这些主题的学习可以通过参考更高级的教程、专业书籍或者参与相关论坛和社区来深入研究。 6. 性能优化:了解如何优化OpenGL ES 3.0的性能也是非常重要的。您可以学习如何使用缓冲区对象、顶点缓冲区对象(VBO)、纹理压缩和其他优化技术来提高应用程序的帧率和响应速度。 总而言之,要系统学习和掌握Android OpenGL ES 3.0,您需要深入理解计算机图形学和OpenGL ES的原理,学习API的使用和性能优化技术,并通过实践项目来强化您的理解和应用能力。这需要坚持不懈的学习和实践,但通过这样的系统学习,您将能够成为一名Android OpenGL ES 3.0的专家。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新视图

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值