OpenGL ES 学习(二) -- 渲染模式和GLSL

news2025/7/9 4:53:54

上一章,我们学习了 OpenGL 的基本知识,这一章,一起学习OpenGL的渲染模式和渲染语言GLSL。

一. 渲染流程

OpenGL的渲染流程如下图所示:
图片来源 https://www.jianshu.com/p/a818684333f2
从这里看出,OpenGL 需要使用顶点着色器,先绘制好轮廓,再通过图元装配,将顶点转换成图元,然后通过光栅化,将图片这种矢量图形,转成为栅格化数据,最后,使用片段着色器,将光栅化的数据,每一个像素进行运算,并绘制上对应的颜色,然后再展示到屏幕中。

图片来源 https://www.jianshu.com/p/48c52f862f42

大致的步骤为:

  1. 确定顶点的位置,通过顶点绘制指定的图形。
  2. 为图形上色,可以是纯色,渐变色,或者图片纹理
  3. 将图形加载到缓冲区,framebuffer 中,展示到屏幕

而我们开发的重点,需要重点关注,顶点着色器,片段着色器,将数据传递到着色器上这三个重点就可以了。

二. 基本概念

  • 管线: 它是一系列数据处理的过程,是显示芯片内部(GPU)处理图形信号相互独立的并行处理单元。

  • 顶点程序:用于描述顶点操作的可执行文件/着色器源代码

  • 图元片段: OpenGL ES 只有三种图元,点、线,三角形,它会把顶点数据数据计算成一个个图元,在这个阶段会进行裁减,透视分割和其他变换操作。

  • 着色器 Shader:用于秒速如何绘制图形图像的具体环节,分为顶点着色器,片段着色器。

  • 光栅化:就是将图元转换成一个二维片段的过程,这些转化由片段着色器处理,这些二维片段,就是屏幕上课绘制的像素。

  • 纹理:可以理解成一张图片,用着色器在上面涂上不同的东西。

三. 坐标

与 Android 左边西不同,GL 的其实位置是在屏幕的中心,以(0,0)为中心店,x 坐标从做到有,y 从下到上,在 [-1,1] 之前取值,再映射到屏幕,而超出 [-1,1] 之外的,不会在屏幕上显示。如下图:

在这里插入图片描述

四. GLSL 语言

GLSL (OpenGL Shading Language)是着色器程序的编程语言,该程序会在 GPU 上执行,使得渲染管线具有可编程性。这里,你可以先简单浏览,等在编写 GLSL 的语言的时候,再来看一下。

4.1 GLSL 特有语法

GLSL 与 C 语言而非常相似,有基本的类型、函数、结构体,但没有指针;当然也有自己的一些特殊类型。

4.1.1 基本类型

在计算机图形中,向量和矩阵是变换的基础,这两种数据类型也是 GLSL 的核心,它的基本类型如下:

  • 浮点向量:vec2 ,vec3 ,vec4
  • 整数向量:ivec2 ,ivec3 ,ivec4
  • 无符号整型向量:uvec2 ,uvec3 ,uvec4
  • boolean向量:bvec2 ,bvec3 ,bvec4
  • 浮点矩阵:mat2,mat3,mat4,mat2x3…
  • 二维纹理句柄:sampler2D

4.1.2 修饰符

  • const:(只读) 常量变量
  • attribute:只能用于顶点着色器,用于经常更改的信息
  • uniform: (始终如一的)用于不经常更改的信息,可用于顶点和片元着色器
  • varying:(易变的)用于修饰从顶点着色器向片元着色器传递变量。

更多的解释,可以参考:https://zhuanlan.zhihu.com/p/52807564

4.2 内置变量

OpenGL 中,有几个内置变量,最常见的是在顶点着色器和片段着色器中

  • 顶点着色器(Vectex Shader):gl_position(位置) 和 gl_pointSize (大小)
  • 片段着色器(Fragment Shader):gl_FragColor (颜色值)

4.3 函数和内置函数

GLSL 的函数使用,与 C 语言基本一直,在定义函数之前先申明类型。不同之处,在于 GLSL 在函数参数上提供了特殊的限定符(修饰符),这个跟 aidl 有点像,如:

  • in:默认模式,相当于传入参数只是 in 实参的一份拷贝,修改的值不会影响 in 参数本身,相当于java的 get
  • out:相当于 wirte-only,可写不可读,相当于 java 的set方法
  • inpuot:可读可写模式,直接改到实参,可以理解有 get 和set 方法。

GLSL 提供内置函数还是挺方便的,常见的有:

  • abs:绝对值
  • floor:向下取整
  • ceil:向上取整
  • mod:取模
  • min:最小
  • max:最大
  • clamp:中间值
  • dot:计算两个向量的点积
  • pow:计算标量的幂次

4.4 GLSL 编写工具

在 Android studio 中,下载 GLSL 的插件,就可以编写后,再拷贝到着色器代码了,有代码提示真的很不错:
在这里插入图片描述

OpenGL 的渲染框架

接下来,看看 GLSL 是如何把 着色器的值传递给 OpenGL 的渲染管线的,如下图:
在这里插入图片描述
从上面可以看到,管线可以分为 client 和 server:

Client:
这里是我们赋予着色器参数的动态值,以及调用的 OpenGL api ,这里指我们的程序代码。

Server:
Server 是整个渲染的核心,它运行再 GPU,Client 和 Server 只能通过 Attributes ,Uniforms 等类型通信。然后再通过着色器 Shader 将数据绘制渲染出来。

参考:
https://mp.weixin.qq.com/s?__biz=MzU5NjkxMjE5Mg==&mid=2247483771&idx=1&sn=9b122a361188aa4cc0d75549be0ee4a4&chksm=fe5a3054c92db942d350306739c2c775c95d107b8f2a213d6ddc9cbc5c042c702dc1d36c3581&scene=21#wechat_redirect
https://www.jianshu.com/p/48c52f862f42
https://www.jianshu.com/p/a818684333f2
https://zhuanlan.zhihu.com/p/52807564

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面向对象之——多态

文章目录一、多态的概念二、多态的条件三、重写四、向上转型和向下转型1、向上转型2、向下转型五、再谈多态六、多态的优缺点总结一、多态的概念 多态是同一个行为具有多个不同表现形式或形态的能力。就比如人吃饭,对于中国人使用筷子吃饭,美国人使用刀…

C. Almost All Multiples(贪心 + 思维)

Problem - C - Codeforces 给定两个整数n和x,如果pi是i的倍数,所有1≤i≤n-1,pn1,且p1x,则长度为n的排列组合† p被称为搞笑。 找出最小的有趣的排列组合,或报告说不存在这样的排列组合。 † 长度为n的排…

分布式学习必看:十年架构大佬带你从零开始学习分布式服务框架!

前言 最近在看《架构探险-从零开始写分布式服务框架》,对于分布式框架的入门级选手还是挺合适的,扫盲。对分布式服务框架中的基本概念:RPC、SOA、序列化、Spring集成RPC、ZooKeeper、I/O模型、Netty、软负载、服务治理做了系统介绍。手写了R…

【知识网络分析】引文网络(citation)

引文网络(citation) 1 读取本地文献并构建引文网络数据集2 网络数据集精简3 剔除孤立点方法封装4 网络图美化5 社团群体划分并结合色谱图显示6 网络节点中心度相关指标计算1 读取本地文献并构建引文网络数据集 新建一个notebook文件后,导入需要使用的包,本案例使用WOS数据…

进程、线程、 Thread类的基本用法 【javaee】

目录 一、什么是进程/任务(Process/Task) 二、什么是线程(Thread) 三、进程和线程的区别 四、创建线程的方法: 方法1 继承 Thread ,重写run 方法2 实现 Runnable 接口 方法3 匿名内部类创建 Thread …

数据库的常用操作

数据库的分类 数据库大体可以分为 关系型数据库 和 非关系型数据库 关系型数据库:是指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型,关系型数据库都基于标准的SQL,只是内部一些实现有区别 常见关系型数据库…

奇舞周刊第 473 期: Rollup 与 Webpack 的 Tree-shaking

记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~奇舞推荐■ ■ ■Rollup 与 Webpack 的 Tree-shakingRollup 和 Webpack 是目前项目中使用较为广泛的两种打包工具,去年发布的 Vite 中打包所依赖的也是 Rollup;在对界面加载效率…

Java项目:JSP手机商城管理系统包含前台

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台,分为管理员与普通用户两种角色,管理员登录后台,普通用户登录前台; 管理员角色…

编译原理之词法分析器随笔和简单实现

借鉴: 编译原理之美. 极客时间上 什么是词法分析 编译原理:词法分析简单的来说就是在字符串中提取一系列的word单词. 编译器的眼里, 我们的一切输入都是什么? 都是一个一个的字符串. 所以编译器干的就是字符串解析工作. 词法分析:自然就是解析出来…

Vue中el和data的写法与 MVVM模型

目录 el和data的两种写法 el的两种写法 data的两种写法 data与el的写法小结 MVVM模型 MVVM模型小结 el和data的两种写法 el的两种写法 <body> <div id"root"> hello,{{name}}</div><script type"text/javascript">const vm ne…

iwebsec靶场 SQL注入漏洞通关笔记3- bool注入(布尔型盲注)

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入&#xff08;宽字节注入&#xff09;_mooyuan的博客-CSDN博客 目录 文章目录 前言 一、源码分析 二、sqlmap渗透 1.注入命令 2.完整交互过程…

小技巧1:如何给pip install进行换源

大家好&#xff0c;我是Kamen Black君&#xff0c;今天给大家介绍一个小技巧&#xff1a;如何给pip安装进行换源。 print("祝大家每天快乐&#xff0c;love and peace&#xff01;") 曾几何时&#xff0c;当我准备好了一段很有趣的代码准备进行运行时&#xff0c;发…

亚马逊云科技re:Invent:这些成功的数据驱动新企业背后的秘诀是什么?

北京时间11月29号&#xff0c;亚马逊云科技年度峰会re:Invent 2022将在拉斯维加斯开幕。这场年度最重磅的云计算技术大会不仅是科技盛宴&#xff0c;也是亚马逊云科技与诸多客户交流互鉴的绝佳平台&#xff0c;今天带大家认识一下几位资深云计算用户&#xff0c;以及他们和re:I…

ENVI5.6超详细教程大全-从安装包到安装流程详解

一、获取资源&#xff1a; https://www.xsoftnet.com/share/a000HzsWPCJXi.html二、安装教程&#xff1a;安装前请关闭杀毒软件&#xff0c;系统防火墙&#xff0c;断开网络连接 1.解压ENVI5.6安装包&#xff1a;ENVI5.6.zip 2.找到envi56-win.exe文件&#xff0c;双击进行安装…

Centos7 安装部署Kubernetes(k8s)集群实现过程

一.系统环境 服务器版本docker软件版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12x86_64二.前言 下图描述了软件部署方式的变迁&#xff1a;传统部署时代&#xff0c;虚拟化部署时代&#xff0c;容器部署时代。 传统部署时代&#xff1a; 早期&am…

制作一个简单HTML游戏网页(HTML+CSS)仿龙之谷网络游戏官网

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

vite+ts-3-后端准备(慢慢更新)

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼&#xff0c;常常是伪装起来的好运。 应用tskoamysql构建高可维护性和扩展性架构 数据库基础 定义和特点 数据库就是按照特定格式存储数据的文件集合&…

二本Java渣渣9面字节遭虐,苦修数月深造这份宝典,终进阿里

见过真正头铁的程序员吗&#xff1f;如题所示&#xff0c;真人真事&#xff0c;这位二本的兄弟在这短短几个月内海投了638份简历&#xff0c;全挑的大厂岗位投的&#xff0c;仅字节跳动就前前后后面试了九次&#xff0c;他说&#xff1a;没有撤退可言。 九次面试经历也是奇了—…

西门子精彩触摸屏SMART V3组态用户管理的具体方法和步骤

西门子精彩触摸屏SMART V3组态用户管理的具体方法和步骤 如下图所示,新建一个项目,在连接中添加连接,触摸屏的IP地址要和 PLC的IP地址保持在同一网段, 如下图所示,在变量中添加一个变量, 如下图所示,在画面1中添加一个IO域,并连接上图中的变量, 如下图所示,设置…

python数据分析绘图

ROC-AUC曲线&#xff08;分类模型&#xff09; 混淆矩阵 混淆矩阵中所包含的信息 True negative(TN)&#xff0c;称为真阴率&#xff0c;表明实际是负样本预测成负样本的样本数&#xff08;预测是负样本&#xff0c;预测对了&#xff09;False positive(FP)&#xff0c;称为假…