GLSL ES着色器语言 使用矢量和矩阵的相关规范
目录
矢量和矩阵类型
下面是声明矢量和矩阵的例子:
赋值和构造
矢量构造函数
矩阵构造函数
构造矩阵的几种方式
访问元素
. 运算符
矢量的分量名
[ ]运算符
运算符
矢量和矩阵可用的运算符
矢量和矩阵相关运算
矢量和浮点数的运算
矢量运算
矩阵和浮点数的运算
矩阵右乘矢量
矩阵左乘矢量
矩阵与矩阵相乘
GLSL ES支持矢量和矩阵类型,这两种数据类型很适合用来处理计算机图形。矢量和矩阵类型的变量都包含多个元素,每个元素是一个数值(整型数、浮点数或布尔值)。矢量将这些元素排成一列,可以用来表示顶点坐标或颜色值等,而矩阵则将元素划分成行和列,可以用来表示变换矩阵。下图给出了矢量和矩阵的例子。
矢量和矩阵类型
下面是声明矢量和矩阵的例子:
赋值和构造
我们使用等号(=)来对矢量和矩阵进行赋值操作。记住,赋值运算符左右两边的变量/值的类型必须一致,左右两边的(矢量或矩阵的)元素个数也必须相同。比如说,下面这行代码就会出错。
这里,vec4类型变量有4个元素,你应当以某种方式传入4个浮点数值。通常我们使用与数据类型同名的内置构造函数来生成变量,对于vec4类型来说,就可以使用内置的vec4()函数。比如,如果要创建4个分量各是1.0、2.0、3.0和4.0的vec4类型变量,你就可以像下面这样调用vec4()函数。
这种专门创建指定类型的变量的函数被称为构造函数(constructor functions),构造函数的名称和其创建的变量的类型名称总是一致的。
矢量构造函数
在GLSL ES中,矢量非常重要,所以GLSL ES提供了丰富灵活的方式来创建矢量。比如:
在第2行代码中,构造函数忽略了v3的第3个分量,只用其第1个和第2个分量创建了一个新的变量。类似地,在第3行代码中,只向构造函数中传入了一个参数1.0,构造函数就会自动地将这个参数值赋给新建矢量的所有元素。但是,如果构造函数接收了不止1个参数,但是参数的个数又比矢量的元素个数少,那么就会出错。
最后,也可以将多个矢量组合成一个矢量,比如:
这里的规则是,先把第1个参数v2的所有元素填充进来,如果还未填满,就继续用第2个参数v4中的元素填充。
矩阵构造函数
矩阵构造函数的使用方式与矢量构造函数的使用方式很类似。但是,你要保证存储在矩阵中的元素是按照列主序排列的。下面几个例子显示了使用矩阵构造函数的不同方式。
构造矩阵的几种方式
● 向矩阵构造函数中传入矩阵的每一个元素的数值来构造矩阵,注意传入值的顺序必须是列主序的。
● 向矩阵构造函数中传入一个或多个矢量,按照列主序使用矢量里的元素值来构造矩阵。
● 向矩阵构造函数中传入矢量和数值,按照列主序使用矢量里的元素值和直接传入的数值来构造矩阵。
● 向矩阵构造函数中传入单个数值,这样将生成一个对角线上元素都是该数值,其他元素为0.0的矩阵。
与矢量构造函数类似,如果传入的数值的数量大于1,又没有达到矩阵元素的数量,就会出错。
访问元素
为了访问矢量或矩阵中的元素,可以使用.或[]运算符,下面将分节叙述。
. 运算符
在矢量变量名后接点运算符(.),然后接上分量名,就可以访问矢量的元素了。矢量的分量名如下表所示。
矢量的分量名
由于矢量可以用来存储顶点的坐标、颜色和纹理坐标,所以GLSL ES支持以上三种分量名称以增强程序的可读性。事实上,任何矢量的x、r或s分量都会返回第1个分量,y、g、t分量都返回第2个分量,等等。如果你愿意,你可以随意地交换使用它们。比如:
如你所见,在这些例子中,x、r和s虽然名称不同,但访问的却都是第1个分量。如果试图访问超过矢量长度的分量,就会出错:
将(同一个集合的)多个分量名共同置于点运算符后,就可以从矢量中同时抽取出多个分量。这个过程称作混合(swizzling)。在下面这个例子中,我们使用了x、y、z和w,其他的集合也有相同的效果:
聚合分量名也可以用来作为赋值表达式(=)的左值:
记住,此时的多个分量名必须属于同一个集合,比如说,你不能使用v3.was。
[ ]运算符
除了.运算符,还可以使用[]运算符并通过数组下标来访问矢量或矩阵的元素。注意,矩阵中的元素仍然是按照列主序读取的。与在JavaScript中一样,下标从0开始,所以通过[0]可以访问到矩阵中的第1列元素,[1]可以访问到第2列元素,[2]可以访问到第3列元素,等等,如下所示:
此外,连续使用两个[]运算符可以访问某列的某个元素:
同样,你也可以同时使用[]运算符和分量名来访问矩阵中的元素,如下所示:
这里有一个限制,那就是在[]中只能出现的索引值必须是常量索引值(constant index),常量索引值的定义如下:
● 整型字面量(如0或1)。
● 用const修饰的全局变量或局部变量,不包括函数参数。
● 循环索引。
● 由前述三条中的项组成的表达式。
下面这个例子就用到了const变量作为访问数组元素的索引:
下面这个例子用到了const组成的表达式作为索引:
注意,你不能使用未经const修饰的变量作为索引值,因为它不是一个常量索引值(除非它是循环索引):
运算符
下表显示了矢量和矩阵所支持的运算。矩阵和矢量的运算符与基本类型(比如整数)的运算符很类似。注意,对于矢量和矩阵,只可以使用比较运算符中的==和!=,不可以使用>、<、>=和<=。如果你想比较矢量和矩阵的大小,应该使用内置函数,比如lessThan()。
矢量和矩阵可用的运算符
注意,当运算赋值操作作用于矢量或矩阵时,实际上是逐分量地对矩阵或矢量的每一个元素进行独立的运算赋值。
矢量和矩阵相关运算
下面这些例子显示了矢量和矩阵在运算时的常见情形。我们假设,在这些例子中,变量是如下定义的:
矢量和浮点数的运算
这个例子显示了+操作符的作用:
例如,v3a=vec3(1.0,2.0,3.0)而f=1.0,那么结果就是v3b=(2.0,3.0,4.0)。
矢量运算
矢量运算操作发生在矢量的每个分量上。
例如,v3a=vec3(1.0,2.0,3.0)而v3b=(4.0,5.0,6.0),那么结果就是v3c=(5.0,7.0,9.0)。
矩阵和浮点数的运算
矩阵与浮点数的运算发生在矩阵的每个分量上。
矩阵右乘矢量
矩阵右乘矢量的结果是矢量,其中每个分量都是原矢量中的对应分量,乘上矩阵对应行的每个元素的积的加和。
矩阵左乘矢量
矩阵与矩阵相乘
相关文章:
GLSL ES着色器语言 使用矢量和矩阵的相关规范
目录 矢量和矩阵类型 下面是声明矢量和矩阵的例子: 赋值和构造 矢量构造函数 矩阵构造函数 构造矩阵的几种方式 访问元素 . 运算符 矢量的分量名 [ ]运算符 运算符 矢量和矩阵可用的运算符 矢量和矩阵相关运算 矢量和浮点数的…...
Himall商城- web私有方法
目录 1 Himall商城- web私有方法 1.1 /// 获取售价 1.1.1 //商品批量销售价 1.1.2 //获取组合购的价格 Himall商城- web私有方法 #region web私有方法 /// <summary> /// 获取售价 /// <para>己计算会员折</para> /// </summary> /// <para…...
Spring Boot 整合 Redis,使用 RedisTemplate 客户端
文章目录 一、SpringBoot 整合 Redis1.1 整合 Redis 步骤1.1.1 添加依赖1.1.2 yml 配置文件1.1.3 Config 配置文件1.1.4 使用示例 1.2 RedisTemplate 概述1.2.1 RedisTemplate 简介1.2.2 RedisTemplate 功能 二、RedisTemplate API2.1 RedisTemplate 公共 API2.2 String 类型 A…...
Tomcat 接收请求并传递给工作线程池流程
文章目录 Tomcat 接收请求并传递给工作线程池流程接收 socket 连接 org.apache.tomcat.util.net.SocketProcessorBase#reset结论 Tomcat 接收请求并传递给工作线程池流程 接收 socket 连接 有两个线程 http-nio-8080-ClientPoller-0/1 (下文称为 clientPoller&…...
在Linux系统上用C++将主机名称转换为IPv4、IPv6地址
在Linux系统上用C将主机名称转换为IPv4、IPv6地址 功能 指定一个std::string类型的主机名称,函数解析主机名称为IP地址,含IPv4和IPv6,解析结果以std::vector<std::string>类型返回。解析出错或者解析失败抛出std::string类型的异常消…...
【硬件设计】硬件学习笔记二--电源电路设计
硬件学习笔记二--电源电路设计 一、LDO设计1.1 LDO原理1.2 LDO参数1.3 应用 二、DC-DC设计2.1 DC-DC原理2.2 DC-DC参数介绍2.4 DC-DC设计要点2.5 DC-DC设计注意事项 写在前面:本篇笔记来自王工的硬件工程师培训课程,想要学硬件的同学可以去腾讯课堂直接搜…...
day34 集合总结
集合总结 一、概述 作用:存储对象的容器,代替数组的,使用更加的便捷 所处的位置:java.util 体系结构 二、Collection 内部的每一个元素都得是引用数据类型 常用方法 add(Object o) 添加元素 addAll(Collection c) 将指定集…...
【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计
作者主页:paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…...
区块链技术与应用 - 学习笔记3【比特币数据结构】
大家好,我是比特桃。本系列笔记只专注于探讨研究区块链技术原理,不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划,在“加快数字发展 建设数字中国”篇章中,区块链被列为“十四五”七大数字经济重点产业之一&#…...
Ubuntu下高效Vim的搭建(离线版)
软件界面 可以看到界面下方有一些常用提示信息:文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下,并执行tar -xvf Vim 即可。 …...
阿里云和腾讯云2核2G服务器价格和性能对比
2核2G云服务器可以选择阿里云服务器或腾讯云服务器,腾讯云轻量2核2G3M带宽服务器95元一年,阿里云轻量2核2G3M带宽优惠价108元一年,不只是轻量应用服务器,阿里云还可以选择ECS云服务器u1,腾讯云也可以选择CVM标准型S5云…...
PYTHON(一)——认识python、基础知识
一、为什么要学习python? Python 被认为是人工智能、机器学习的首选语言,可以说是全世界最流行通用范围最广的语言,几乎可以完成所有的任务,像设计游戏、建网站、造机器人甚至人工智能等都广泛使用Python。 二、输出(…...
Python 操作 Excel
之前看过一篇文章,说一个工作多年的老员工,处理数据时只会用复制粘贴到 Excel ,天天加班工作还完不成,后来公司就招了一个会 Python 的新人,结果分分钟就处理完成。所以工作中大家经常会使用 Excel 去处理以及展示数据…...
21.添加websocket模块
这里默认读者了解websocket协议,若是还不了解可以看下这篇文章wesocket协议。 websocket主要有三个步骤,1通过HTTP进行握手连接,2进行双向通信,3.协商断开连接 第一步的握手连接需要HTTP,所以还需要使用到上一节讲解…...
Linux UDP编程流程
文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下: socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOC…...
【opencv】多版本安装
安装opencv3.2.0以及对应的付费模块 一、安装多版本OpenCV如何切换 按照如下步骤安装的OpenCV,在CMakeLists.txt文件中,直接指定opencv的版本就可以找到相应版本的OpenCV,为了验证可以在CMakeLists.txt文件中使用如下指令输出版本验证&…...
webpack打包常用配置项
webpack打包配置项 参考链接 文件结构:最基础版 先安装 npm i webpack webpack-cli --dev 运行命令:npx webpack 进行打包 1. 配置webpack.config.js文件: const path require(path); module.exports {mode: development, // 开发环境 …...
回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图&a…...
selenium_webdriver自动化测试指南
目录 1 引言 4 1.1 目的.. 4 1.2 背景.. 4 1.3 参考资料.. 4 2 安装并引用Selenium2. 5...
红米Note12Turbo解锁BL刷入PixelExperience原生ROM系统详细教程
红米Note12Turbo的兄弟是国外POCO F5 机型,并且该机性价比非常高,国内外销量也还可以,自然不缺第三方ROM适配。目前大家心心念念的原生PixelExperience已成功发布,并且相对来说,适配程度较高,已经达到日用的…...
NoSQL之Redis配置与优化(一)
关系数据库与非关系型数据库 : ●关系型数据库: 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是一种基于…...
Boost搜索引擎
项目背景 先说一下什么是搜索引擎,很简单,就是我们平常使用的百度,我们把自己想要所有的内容输入进去,百度给我们返回相关的内容.百度一般给我们返回哪些内容呢?这里很简单,我们先来看一下. 搜索引擎基本原理 这里我们简单的说一下我们的搜索引擎的基本原理. 我们给服务器发…...
侧边栏的文章分类、热门文章和热门文章的展示(Go 搭建 qiucode.cn 之九)
早就有言,秋码记录 虽早已不是原来的面貌,但这终究是不防碍我们使用golang来搭建它。 而又为什么是使用golang呢?并非是其他编程语言呢?想必 时候回答【我为什么要学习 Go 语言(golang)】这个问题了 已经给出了答案! 当然,当初学习golang时,不单单是为了搭建一个博客应…...
LeetCode——贪心篇(二)
刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗…...
Linux find
1.find介绍 linux查找命令find是linux运维中很重要、很常用的命令之一,find用于根据指定条件的匹配参数来搜索和查找文件和目录列表,我们可以通过权限、用户、用户组、文件类型、日期、大小等条件来查找文件。 2.find语法 find语法 find [查找路径] …...
UE4实现断线重连功能
断线重连的整体逻辑是 设备离线后,根据需要决定是否保留pawn,还是设备重连后再重新生成一个,然后是断线重连时的验证方式,最后是playerstate重连后的属性保留 重载Playercontroller的PawnLeavingGame,这里是设备断线后࿰…...
nginx笔记
1. nginx 简介 nginx性能比apache强,体现 在io模型方面 76 Pv: UV : 不同浏览器是不同的UV GET 获取 POST 上传 HEAT 只看头 访问网站的流程 1.dns解析 2.cdn 3.tcp 4.web服务器 处理 建立连接 接收请求 处理请求 GET POST等 获取资源 构…...
动态库的制作和使用
动态库和静态库的工作原理 配置环境变量 方式1: 坏处:环境变量是临时的 方式2: 1 用户级别的配置: 进入到/home,找到.bashrc,进入 先去找到库的路径 然后再到.bashrc最后一行输入路径 使其生效 2 系统…...
AWS Glue Pyspark+Athena基础学习汇总
Pyspark 基础学习汇总篇🍎 一、AWS 架构 ① AWS Glue:工作平台,包括脚本的编写以及管理脚本的运行状态以及调度等(主要:数据库配置、ETL和数据转换脚本编写、调度) ② Amazon S3 数据湖(数仓):数据的存储 ③ Athena:(雅典娜)SQL直接编写查询工作台(会产生费用) ④ Q…...
智能合约安全新范式,超越 `require`和`assert`
智能合约安全新范式,超越 require_assert 摘要 不要只为特定的函数写 require 语句;为你的协议写 require 语句。函数遵循检查(requirements)-生效(Effects)-交互(INteractions)协议不变性(Invariants)或 FREI-PI 模式可以帮助你的合约更加安全&#x…...
wordpress清新/上海网络推广专员
<jQuery EasyUI最新版下载> 在本教程中,你将学习到有关于easyui折叠面板的知识。折叠面板包含了一系列的面板,其中所有的面板标题都是可见的,但只有一个面板的主体内容在某个时间是可见的。当用户点击面板标题时,该面板的主…...
翔云白云手机网站建设/男生最喜欢的浏览器
非常感谢我们的撰稿人斯蒂芬,最近他分享了自己的两段描述性的评论,这些评论事关他的山进909X2收音机所暴露出的问题。我已将这两段评论编辑在一起并罗列如下:“我从山进欧洲公司购买了ATS-909X2收音机,我彻底失望了。我知道自己的…...
成都哪家网站建设做得好/杭州排名推广
第一种:#a{ background:#FFCC33; filter:alpha(opacity50); /*支持 IE 浏览器*/ -moz-opacity:0.50; /*支持 FireFox 浏览器*/ opacity:0.50; /*支持 Chrome, Opera, Safari 等浏览器*/ width: 300px; height:300px; } 还有一种仅让背景半透明,里面内…...
网站怎么做图片动态图片不显示了/企业品牌推广
注意 1.通过property var 声明的数据类型即使是string类型,仍然无法使用string的方法,为了使用可以直接将其定义为string类型 2.Timer是qml的定时器,restart()方法才会清零,stop不会 3.Tooltip不是所有控…...
网站建设都包括哪些方面/长沙做搜索引擎的公司
T1 一道图论神题(god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G{V,E},这张无向图有n个点m条边组成。并且这是一张带权图,只有点权。 LYK想把这个图删干净,它的方法是这样的。每次选择一个点,将它删掉&a…...
用bootstrap做的网站有哪些/免费域名注册永久
题目 题目非常简单,无非就是判断一个没用头结点的指针,是否为回文链表,但是简单的题目往往值得更深的思考。该题目有很多的解法,想要在时间击败百分百的话,不仅仅是代码本身,可能跟电脑还有一定的关系。 全…...