[3]Opengl ES着色器
术语:
VertexShader:顶点着色器,用来描述图形图像位置的顶点坐标;
FragmentShader:片元着色器,用来给顶点指定的区域进行着色;
Vertex:顶点
Texture:纹理,给顶点区域进行渲染的材质,比如图像等,其实就是一块内存空间,里面的像素按一定规则排列;
Opengl ES2.0对渲染管线中的两个阶段增加可编程支持:顶点着色器和片元着色器,分别用于顶点数据和图元着色编程控制,其使用的编程语言叫GLSL,类似C语言,下面对着色器使用的类型、修饰符进行介绍。
1. 数据类型:
float bool int 基本数据类型
vec2 包含了2个浮点数的向量
vec3 包含了3个浮点数的向量
vec4 包含了4个浮点数的向量
ivec2 包含了2个整数的向量
ivec3 包含了3个整数的向量
ivec4 包含了4个整数的向量
bvec2 包含了2个布尔数的向量
bvec3 包含了3个布尔数的向量
bvec4 包含了4个布尔数的向量
mat2 2*2维矩阵
mat3 3*3维矩阵
mat4 4*4维矩阵
sampler1D 1D纹理采样器
sampler2D 2D纹理采样器
sampler3D 3D纹理采样器
2.着色器修饰符
属性(Attribute):由 vertext array 提供的顶点数据,如空间位置,法向量,纹理坐标以及顶点颜色,属性可以理解为针对每一个顶点的输入数据。属性只在顶点着色器中才有,片元着色器中没有属性。OpenGL ES 2.0 规定了所有实现应该支持的最大属性个数不能少于 8 个。
常量(Uniforms): Uniforms保存由应用程序传递给着色器的只读常量数据。在顶点着色器中,这些数据通常是变换矩阵,光照参数,颜色等。由 uniform 修饰符修饰的变量属于全局变量,该全局性对顶点着色器与片元着色器均可见,也就是说,这两个着色器如果被连接到同一个应用程序中,它们共享同一份 uniform 全局变量集。因此如果在这两个着色器中都声明了同名的 uniform 变量,要保证这对同名变量完全相同:同名称+同类型,因为它们实际是同一个变量。此外,uniform 变量存储在常量存储区,因此限制了 uniform 变量的个数,OpenGL ES 2.0 也规定了所有实现应该支持的最大顶点着色器 uniform 变量个数不能少于 128 个,最大的片元着色器 uniform 变量个数不能少于 16 个。
采样器(Samplers): 一种特殊的 uniform,用于呈现纹理。sampler 可用于顶点着色器和片元着色器。
可变变量(Varying):varying 变量用于存储顶点着色器的输出数据,也存储片元着色器的输入数据。varying 变量会在光栅化处理阶段被线性插值。顶点着色器如果声明了 varying 变量,它必须被传递到片元着色器中才能进一步传递到下一阶段,因此顶点着色器中声明的 varying 变量都应在片元着色器中重新声明为同名同类型的 varying 变量。OpenGL ES 2.0 也规定了所有实现应该支持的最大 varying 变量个数不能少于 8 个。
3.着色器坐标系统
在Opengl ES开发中,我们会碰到如下的坐标系统:
物体坐标系、视界坐标系、摄像机坐标、规范化坐标、屏幕坐标。
下面我们简单介绍下这几种坐标系的关系,详细的介绍后续会做介绍,下面我们先来看看在Opengl ES中,一个画面从开始到显示到屏幕上经过的转换。


物体坐标系:此坐标系针对场景中的单个物体而言,就是说场景中每个物体都有自己独立的坐标,其中某个物体做了旋转,并不会影响到其它物体的坐标。
世界坐标系:世界坐标系是一个比较特殊的坐标系,其一般来说是固定的,用来标定物体和物体之间的相对位置关系(同在世界坐标系之中的物体),形象点说,一个房间相当于一个世界坐标,房间中的桌子、椅子、人各种拥有自己的物体坐标系,但是其在房间中的位置标定物体在房间中和其它物体的相对位置关系。
摄像机坐标:摄像机坐标是相对于视点来说的,是从摄像机的角度来描述的,比如房间中已经有很多物体,那么我们调整摄像机的位置,所观察到的物体的视角是不一样的,这就是上图说的视变换,这里其实包含两个方面,摄像机调整其观察位置和被观察物体进行变换,两者的结果是等价的,因为最终的结果就是我们从不同角度看到的物体是不一样的。
规范化坐标系:此坐标系也叫归一化,是Opengl ES的空间计算坐标系,取值范围到-1~1之间。
屏幕坐标系:此坐标系就是我们显示屏幕的实际坐标系,其通常是左上角为原点,X轴向右,Y轴向下,在归一化坐标下的物体最终都会通过视口变换转为屏幕坐标,然后显示在屏幕上。
相关文章:
[3]Opengl ES着色器
术语: VertexShader:顶点着色器,用来描述图形图像位置的顶点坐标; FragmentShader:片元着色器,用来给顶点指定的区域进行着色; Vertex:顶点 Texture:纹理…...
Spring Boot 中实现任务后台处理的几种常见方式
博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 在现代应用程序中,后台处理对于处理发送电子邮件、处理文件、生成报告等任务至关重要。 Spring Boot 提供了多种机制来高效地实现后台任务。本文探讨了在 Spring Boot 中处理后台处理的各…...
部署--UmiJS
默认方案 umi2 默认对新手友好,所以默认不做按需加载处理,umi build 后输出 index.html、umi.js 和 umi.css 三个文件。 不输出 html 文件 某些场景 html 文件交给后端输出,前端构建并不需要输出 html 文件,可配置环境变量 HTM…...
python自学笔记
python部分总结 主要记录的是python与之前学的语言的不同之处 函数总结 首字母大写: name.title() 删除右边空格(暂时):name.rstrip() 删除左边空格(暂时):name.lstrip() 删除前缀(暂时):name.removeprefi…...
Ubuntu磁盘不足扩容
1.问题 Ubuntu磁盘不足扩容 2.解决方法 安装一下 sudo apt-get install gpartedsudo gparted...
【ROS2】spin、spinOnce、spin_some、spin_until_future_complete
1、简述 spinOnce仅处理一个回调函数(ROS1); spin_some类似于ROS1的spinOnce,但处理多个任务,然后返回(ROS2); spin会持续处理回调函数直到无任务,然后阻塞(ROS1、ROS2); 注意: 只有消息推送(publisher)功能的程序,不需要使用spin_some(),因为它不执行任何回…...
化繁为简:中介者模式如何管理复杂对象交互
化繁为简:中介者模式如何管理复杂对象交互 中介者模式 是一种行为型设计模式,定义了一个中介者对象,来封装一组对象之间的交互。中介者模式通过将对象之间的交互行为从多个对象中抽离出来,集中封装在一个中介者对象中,…...
控制STM32蜂鸣器示例代码(江科大)
以下代码来源于本人学习江科大的课程,这是一个简单的STM32微控制器程序,用于控制连接到GPIOB第12号引脚的蜂鸣器。程序通过GPIOB的第12号引脚输出PWM波形来控制蜂鸣器的频率,从而产生声音。 #include "stm32f10x.h" …...
Java基础知识扫盲
目录 Arrays.sort的底层实现 BigDecimal(double)和BigDecimal(String)有什么区别 Char可以存储一个汉字吗 Java中的Timer定时调度任务是咋实现的 Java中的序列化机制是咋实现的 Java中的注解是干嘛的 Arrays.sort的底层实现 Arrays.sort是Java中提供的对数组进行排序的…...
ZLMediaKit Windows编译以及使用
1.运行ZLMediaKit 2.通过ffmpeg把视频源推流给ZLMediaKit 执行以下命令,将本地视频通过RTSP协议推流给ZLMediaKit。 ffmpeg -re -stream_loop -1 -i "D:\workplace\armgb\public\1.fileh264" -vcodec h264 -f rtsp rtsp://127.0.0.1/live/test 若想将本…...
基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)
本文主要内容:详细介绍了无人机航拍输电线瓷瓶检测的整个过程,从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式,请先看检测效果 现状 输电线路绝缘瓷瓶的检测主要依赖人工巡检。巡检人员需携带专业设备,攀…...
【Python百日进阶-Web开发-FastAPI】Day805 - FastAPI的请求体
文章目录 一、导入 Pydantic 的 BaseModel二、创建数据模型三、声明为参数四、结果五、自动化文档六、编辑器支持七、使用模型八、请求体 + 路径参数九、请求体 + 路径参数 + 查询参数十、不使用 Pydantichttps://fastapi.tiangolo.com/zh/tutorial/body/ 当你需要将数据从客户…...
【Kubernetes】常见面试题汇总(二十八)
目录 79.您如何看待公司从单一服务转向微服务并部署其服务容器? 80.什么是 Headless Service? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题。 题目 69-113 属于【Kubernetes】的生产应用题。 79.您如何看待公司从单一服务转…...
单ISP与双ISP的区别是什么
单ISP(单一互联网服务提供商)与双ISP(双重互联网服务提供商)主要在以下几个方面有区别: 服务冗余: 单ISP:只有一个互联网服务提供商提供的网络连接。如果该ISP发生故障,整个网络连接…...
【linux】gcc makefile
🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.gcc如何完成02.gcc选项03.函数库与动静态链接静态链接动态链接库文件特点和用途动态链接版本和兼容性 04.makefile自动推导 01.gcc如何完成 预处理(进行宏替换) 预处理功能主要…...
12.Java基础概念-面向对象-static
欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words! 一、static关键字的含义…...
移动开发(三):使用.NET MAUI打包第一个安卓APK完整过程
目录 一、修改AndroidManifest.xml 配置APP基本信息权限 二、修改项目属性调整输出Android包格式为APK 三、项目发布 四、APP分发 五、总结 之前给大家介绍过使用使用.NET MAUI开发第一个安卓APP,今天给大家介绍如何打包成APK,然后安装到安卓手机正常运行。这里还是沿用…...
数据库中的DUAL表
在日常的数据库操作中,DUAL表是一个特殊的存在。它是一个伪表,用于在不需要实际数据表的情况下进行简单的查询。特别是在执行一些无关联的数据计算时,DUAL表经常派上用场。 什么是DUAL表? DUAL表最早出现在Oracle数据库中&#…...
寄宿制学校自闭症教育:为每个孩子创造奇迹
寄宿制学校自闭症教育:星贝育园——为每个孩子创造奇迹 在自闭症儿童教育的广阔领域中,寄宿制学校以其独特的教育模式和全方位的关怀体系,正逐步成为推动这些特殊孩子成长与发展的重要力量。广州的星贝育园自闭症儿童寄宿制学校,…...
Vue前端无法接收到后端返回的数据以及全局CSS样式影响(已解决)
Vue前端无法接收到后端返回的数据 前提:把很久以前的项目,翻出来重新优化一下,做一下前端的美化(以前都是用的element的UI,现在想自己写)。 由于是自己利用简单的html语句,主要面向各个按钮控…...
2026降AI工具实测:性价比/效果/安全选品指南
花了整整一周时间把市面5款主流降AI工具全维度测了一遍,从处理效果、定价、安全性三个核心维度做了横向对比。结论放在最前面:综合实力最强、毕业生首选的是SpeedAI科研小助手,性价比拉满,新手还能免费试用,完全适配绝…...
5个Rust驱动特性解决存储清理难题:Czkawka技术深度解析
5个Rust驱动特性解决存储清理难题:Czkawka技术深度解析 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka Czkawka是一款基于Rust语言开发…...
如何让foobar2000界面脱胎换骨?3大设计理念打造个性化音乐体验
如何让foobar2000界面脱胎换骨?3大设计理念打造个性化音乐体验 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 副标题:从安装到定制:零基础也能掌握的foobox-cn美化…...
COMSOL 6.1 激光粉末床熔融气孔缺陷演化仿真:开启微观世界的探索之旅
COMSOL 6.1 激光粉末床熔融气孔缺陷演化仿真案例模型 本案例选用层流和流体传热模块,采用水平集法,考虑材料的热物性以及激光加工过程中的马兰戈尼效应、熔融金属表面张力、反冲压力、相变潜热、热对流和热辐射,建立含气孔缺陷的二维数值仿真…...
终极指南:如何用btcrecover找回你忘记的比特币钱包密码 [特殊字符]️
终极指南:如何用btcrecover找回你忘记的比特币钱包密码 🗝️ 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assist…...
保姆级教程:用OpenAI Whisper给视频自动生成字幕(附Python代码)
视频创作者必备:用Whisper打造高效字幕工作流 每次剪辑视频最头疼的就是加字幕?作为过来人,我完全理解那种对着时间轴逐帧调整的痛苦。直到发现Whisper这个神器,我的工作效率直接翻了三倍。今天就把这套全自动字幕生成方案完整分享…...
系统架构设计师常见高频考点总结之数据库
1. 局部数据库缓存1.1. 如何避免单点故障?(高可用设计)只要题目提到“避免单点故障”或“高可靠性”,标准答案只有一套组合拳:冗余(Redundancy):一台不够就两台。热备(Ho…...
【Leetcode LCR 112】【记忆化搜索】矩阵中的最长递增路径
题目跳转 这一道题十分有意思(bushi),我们来一起看一下 1.题目考点与理解 主要考点: 记忆化搜索DFS 的递归思想与状态定义方向遍历与边界合法性判断 主要理解: 重要理解1 : 不一定要从最小的111开始,每一个都需要遍历(贪心思想错误) 重要理解2&#…...
SEO自动化工具如何提高网站排名_SEO自动化工具如何进行数据报告
<h2>SEO自动化工具如何提高网站排名</h2> <p>在当今互联网时代,网站的排名直接关系到其流量和业务增长。SEO自动化工具如何在提高网站排名方面发挥作用呢?本文将从多个角度展开讨论,帮助你理解这些工具如何提升网站在搜索引…...
墨语灵犀助力软件测试:智能测试用例生成与缺陷报告分析
墨语灵犀助力软件测试:智能测试用例生成与缺陷报告分析 作为一名在软件测试领域摸爬滚打多年的工程师,我深知这份工作的“痛”与“乐”。痛的是,面对动辄几十上百页的需求文档,手动编写测试用例的枯燥与耗时;乐的是&a…...
