公司地址查询网站,建设银行陕西省分行网站,免费网站空间女人,如何做好网络宣传工作目录
矢量和矩阵类型
下面是声明矢量和矩阵的例子#xff1a;
赋值和构造
矢量构造函数
矩阵构造函数
构造矩阵的几种方式
访问元素
. 运算符
矢量的分量名
#xff3b; #xff3d;运算符
运算符
矢量和矩阵可用的运算符
矢量和矩阵相关运算
矢量和浮点数的…目录
矢量和矩阵类型
下面是声明矢量和矩阵的例子
赋值和构造
矢量构造函数
矩阵构造函数
构造矩阵的几种方式
访问元素
. 运算符
矢量的分量名 运算符
运算符
矢量和矩阵可用的运算符
矢量和矩阵相关运算
矢量和浮点数的运算
矢量运算
矩阵和浮点数的运算
矩阵右乘矢量
矩阵左乘矢量
矩阵与矩阵相乘 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。
矢量和矩阵可用的运算符 注意当运算赋值操作作用于矢量或矩阵时实际上是逐分量地对矩阵或矢量的每一个元素进行独立的运算赋值。
矢量和矩阵相关运算
下面这些例子显示了矢量和矩阵在运算时的常见情形。我们假设在这些例子中变量是如下定义的 矢量和浮点数的运算
这个例子显示了操作符的作用 例如v3avec31.02.03.0而f1.0那么结果就是v3b2.03.04.0。
矢量运算
矢量运算操作发生在矢量的每个分量上。 例如v3avec31.02.03.0而v3b4.05.06.0那么结果就是v3c5.07.09.0。
矩阵和浮点数的运算
矩阵与浮点数的运算发生在矩阵的每个分量上。 矩阵右乘矢量
矩阵右乘矢量的结果是矢量其中每个分量都是原矢量中的对应分量乘上矩阵对应行的每个元素的积的加和。 矩阵左乘矢量 矩阵与矩阵相乘