android平台下OpenGL ES 3.0从零开始

OpenGL ES 3.0学习实践

目录

OpenGL ES对Android平台的支持情况

OpenGL ES当前主要版本有1.0/1.1/2.0/3.0/3.1

OpenGL ES版本Android版本描述
OpenGL ES1.0Android 1.0+OpenGL ES 1.x是针对固定硬件管线的,Android 1.0和更高的版本支持这个API规范。
OpenGL ES2.0Android 2.2(API 8)+OpenGL ES 2.x是针对可编程硬件管线的,不兼容OpenGL ES 1.x,Android 2.2(API 8)和更高的版本支持这个API规范。
OpenGL ES3.0Android 4.3(API 18)+向下兼容OpenGL ES 2.x,Android 4.3(API 18)及更高的版本支持这个API规范。
OpenGL ES3.1Android 5.0 (API 21)+向下兼容OpenGL ES3.0/2.0,Android 5.0(API 21)和更高的版本支持这个API规范
OpenGL ES 3.0概述

OpenGL ES 3.0实现了具有可编程着色功能的图形管线,由两个规范组成:OpenGL ES 3.0 API 规范OpenGL ES着色语言3.0规范(OpenGL ES SL)

OpenGL ES 3.0图形管线图

顶点着色器

顶点着色器实现了顶点操作的通用可编程方法,着色器(Shader)是在GPU上运行的小程序
顶点着色器的输入包括:

  • 着色器程序一一描述顶点上执行操作的顶点着色器程序源代码或者可执行文件。
  • 顶点着色器输人(或者属性)一一用顶点数组提供的每个顶点的数据。
  • 统一变量(uniform)一一顶点(或者片段)着色器使用的不变数据。
  • 采样器一一代表顶点着色器使用纹理的特殊统一变量类型。

顶点着色器的输入输出模型

顶点着色器取得一个位置及相关的颜色数据作为输入属性,用一个 4x4矩阵变换位置,并输出变换后的位置和颜色。

#version 300 es
uniform mat4 u_mvpMatrix;

in vec4 a_postion;
in vec4 a_color;

out vec4 v_color;
void main(){
	v_color = a_color;
	gl_Position = u_mvpMatrix * a_postion
}
片段着色器

片段着色器片段着色器为片段上的操作实现了通用的可编程方法。
对光栅化阶段生成的每个片段执行这个着色器,采用如下输入:

  • 着色器程序——描述片段上所执行操作的片段着色器程序源代码或者可执行文件。
  • 输人变量——光姗化单元用插值为每个片段生成的顶点着色器钧出。
  • 统一变量——片段(或者顶点)着色器使用的不变数据。
  • 采样器——讨七表片段着色器所用纹理的特殊统一变量类型。

图元装配

图元装配顶点着色器之后, 0pennGL ES 3.0 图形管线的下一阶段就是图元装配。
`图元(Primitive)是三角形、直线或者点精灵等几何对象。图元的每个顶点被发送到顶点着色器的不同拷贝。
在图元装配期间,这些顶点被组合成图元。对于每个图元,必须确定图元是否位于视锥体(屏幕上可见的 3D 空间区域)内。如果图元没有完全在视锥体内,则可能需要进行裁剪。如果图元完全处于该区域之外,它就会被抛弃。裁剪之后,顶点位置被转换为屏幕坐标。也可以执行一次淘汰操作,根据图元面向前方或者后方抛弃它们。裁剪和淘汰之后,图元便准备传递给管线的下一阶段 ― 光栅化阶段。

光栅化

下一阶段是光栅化,在此阶段绘制对应的图元(点精灵、直线或者三角形)。光栅化是将图元转化为一组二维片段的过程,然后,这些片段由片段着色器处理。这些二维片段代表着可在屏幕上绘制的像素。

OpenGL ES 3.0 光栅化阶段

逐片段操作

片段着色器之后,下一个阶段就是逐片段操作

OpenGL ES 数据存储

android中的程序都是运行在虚拟机中的,而OpenGL作为本地系统库是运行在硬件上的,虚拟机与OpenGL数据传输的方式由两种

  • 第一种:使用Java调用本地接口JNI的方式,当我们使用GLES20包里的方法时,内部实现其实就是调用本地方法。
  • 第二种:改变内存的分配方式,Java当中有个特殊的类(如ByteBuffer)集合,可以直接分配本地内存块,并把Java的数据复制到本地内存,本地内存可以被本地环境存取,而不受垃圾回收器管控。

从虚拟机到本地环境的数据传输过程

项目地址:
https://github.com/byhook/opengles4android

参考:
《OpenGL ES 3.0 编程指南第2版》
《OpenGL ES应用开发实践指南Android卷》

  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答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的专家。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值