OpenGL ES简述(1)

server/2024/10/9 0:39:36/

OpenGL_ES1_0">OpenGL ES简述(1)

简述

这个章节我们会来介绍一下OpenGL ES,学习OpenGL ES主要是为了了解GPU为我们提供了怎样的能力,Android系统中使用的是OpenGL ES,但是核心是一样的,了解OpenGL ES后我们可以对Android渲染有更深的理解。
Android上我们知道我们是通过Canvas来描述一个View需要渲染成什么效果的,其实Canvas的指令最终都是由Vulkan实现的,而现在新版本中的Android,Vulkan也会将渲染指令转化成OpenGL ES的指令,以便使用GPU渲染得到硬件加速。而对于3D的渲染则是直接使用OpenGL ES来实现的。

OpenGL 是什么,OpenGL ES和OpenGL的区别是什么?说简单一点其实OpenGL就是一个图形渲染库,它提供了一套渲染图形的接口,它可以用来控制GPU,使用GPU来根据我们的指令渲染图像,所以它的实现需要显卡厂商来实现,它则是一套通用标准,显卡厂商都会遵循它的标准提供这样的接口能力。
OpenGL ES则是为移动设备定制的OpenGL,是OpenGL的一个子集,他们的核心其实差不多,只是api有一些不同。
还有一个缩写EGL,EGL其实是OpenGL ES的一套封装,他的目的是跨平台,也就是说,EGL提供的接口是一套平台无关的接口,可以在不同的操作系统上使用,比如Android和Linux。

涉及的概念

  • 顶点缓冲区
    顶点就是几何中的点,两个点可以确定一个线,三个点可以绘制一个三角形。顶点缓冲区就是用于存储顶点的,这个缓冲区指的是显存(显卡内存),我们买显卡的时候经常会会说显存16G之类的,GPU会使用自己的内存,即显存。而我们调用OpenGL的逻辑是在CPU上的,所以OpenGL提供了方法,创建顶点缓冲区就是在显卡上分配内存,我们会将顶点数据先放到顶点缓冲区,后续告诉GPU以一定的格式去读取顶点数据。
    顶点数据可以包含很多数据,位置,颜色,纹理等等,其实本质就是一段内存,想怎么用就看开发时候的需求,这个后面我们会详细讲。
  • 着色器(shader)
    着色器其实就是一段程序,只不过这段程序是给GPU执行的。
    我们主要去了解顶点着色器和片段着色器。
    在渲染的时候,每个像素都会执行一次顶点着色器和片段着色器,顶点着色器是用于计算位置信息的,而片段着色器是计算每个像素点需要渲染的颜色。
  • 统一变量
    统一变量用于CPU和GPU中的数据传递,顶点缓冲区的本质其实也是用于CPU和GPU的数据传递,区别就是统一变量每次渲染前设置后就是一个固定值,而顶点缓冲区每个顶点都可以设置一个值,这个描述可能有点难懂,后续我们在使用的时候会详细介绍。
  • 纹理
    纹理其实类似于Android里面的Bitmap,可以理解为图片,OpenGL如果需要渲染一张图片,则需要使用纹理来实现。
  • 相机/投影
    同样一个物体,我们在不同角度看,会不一样,我们的眼睛就好比一个相机,移动相机位置最终渲染的结果也会不同。另外OpenGL可以用来渲染3D图像,而我们最终呈现在屏幕上其实还是一个2D的图片,就需要一个透视的投影,2D的则是正交投影。其实这些都是通过一些线性代数的计算来获得结果的,通过将原来的坐标乘以一个特定的矩阵,进行一个映射得到结果。

涉及内容

我们将基于Android来举例学习OpenGL ES。
主要会介绍一下的内容:

  • 绘制一个三角形
  • EGL使用介绍
  • 顶点缓冲区的使用
  • 顶点着色器和片段着色器的使用
  • 索引缓冲区
  • 加载纹理
  • MVP(变换矩阵)

http://www.ppmy.cn/server/127216.html

相关文章

jmeter中token测试

案例: 网站:http://shop.duoceshi.com 讲解:用三个接口来讲解 第一个接口code:GET http://manage.duoceshi.com/auth/code 第二个登录接口:http://manage.duoceshi.com/auth/login 第三个接口:http://…

C++(string类的实现)

1. 迭代器、返回capacity、返回size、判空、c_str、重载[]和clear的实现 string类的迭代器的功能就类似于一个指针,所以我们可以直接使用一个指针来实现迭代器,但如下图可见迭代器有两个,一个是指向的内容可以被修改,另一个则是指…

样式重置 normalize.css

安装normalize.css npm install --save normalize.csspnpm add normalize.css安装less yarn add less -Dmain.ts import { createApp } from vue import App from ./App.vue // 引入 import normalize.csscreateApp(App).mount(#app)index.less import less中的语法 imp…

sadTalker本地编译

SadTalker一款开源的可生成逼真的人像动画的工具。它利用深度学习技术,根据输入的图像和音频,生成具有生动表情和动作的视频。用户可以通过上传照片或使用预设的模型,轻松创建个性化的动画内容. 以上是官网的图, 下边是本地部署生成的,效果差…

OpenGL ES 索引缓冲区(4)

OpenGL ES 索引缓冲区(4) 简述 本节会介绍索引缓冲区,索引缓冲区和顶点缓冲区类似,也是显存上的一段内存,只不过上面的数据用处不同,索引缓冲区故名思义里面的数据是用于索引,主要作用是用于复用顶点缓冲区里的数据。…

【ADC】ADC 系统失调和增益误差的校准方法

概述 本文学习于TI 高精度实验室课程,讨论如何计算增益和偏移误差并通过校准消除。首先对数据转换器系统进行偏移和增益误差计算,然后讨论几种校准此误差的方法。最后介绍一些难以校准的误差源。 文章目录 概述一、误差校准原理与方法二、实际应用问题举…

黑马java学习笔记13(阶段二 第四章4-2~第四章4-3 98)

以下学习笔记记录于:2024.09.25-2024.09.30 文章目录 阶段二 JavaSE进阶第四章 集合框架4-2 List系列集合90 特点、特有方法91 遍历方式92 ArrayList集合的底层原理93 LinkedList集合的底层原理、特有方法94 LinkedList集合的应用场景:栈、队列 4-3 Set系…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习01(环境准备)

1 准备工作 由于创建数据中心需要安装很多服务器,这些服务器要耗费很所物理物理计算资源、存储资源、网络资源和软件资源,作为穷学生只有几百块的n手笔记本,不可能买十几台服务器来搭建数据中心,也不愿意跑实验室,想躺…