我的OpenGL学习进阶之旅关于OpenGL的着色器的向量和矩阵分类的访问方式: xyzw/rgba/stpq以及数组下标

Posted 字节卷动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的OpenGL学习进阶之旅关于OpenGL的着色器的向量和矩阵分类的访问方式: xyzw/rgba/stpq以及数组下标相关的知识,希望对你有一定的参考价值。

一、向量的单独分量的表达方式

向量的单独分量可以用两种方式访问:

  1. 使用 “.运算符
  2. 使用数组下标

二、命名方案

2.1 三种组合访问方式

根据组成向量的分量数量,每个分量可以通过下面三种组合访问

  1. x,y,z,w
    通常代表了一个空间坐标(x,y,z,w),你可以分别使用.x、.y、.z和.w来获取它们的第1、2、3、4个分量。
  2. r,g,b,a
    通常代表了一个颜色(r,g,b,a),你可以分别使用.r、.g、.b和.a来获取它们的第1、2、3、4个分量。
  3. s,t,p,q
    通常代表了一个纹理坐标(s,t,p,q),你可以分别使用.s、.t、.p和.q来获取它们的第1、2、3、4个分量。

2.2 组合方式的意义

三种不同命名方案的原因是向量可以互换地用于表示数学上的向量、颜色和纹理坐标

  • x/r/s分量总是引用向量的第1个分量。
  • y/g/t分量总是引用向量的第2个分量。
  • z/b/p分量总是引用向量的第3个分量。
  • w/a/q分量总是引用向量的第4个分量。
    不同的命名约定只是未了方便。

2.3 组合方式注意事项

但是,不能在访问向量时混合使用命名约定(换言之,不能才有.xgr这样的引用方法,因为一次只能使用一种命名约定)

三、使用 “.” 运算符

使用"." 运算符时,可以在操作中重新排列向量的分量。

下面是一个例子。

	vec3 myVec3 = vec3(0.0,1.0,2.0);   // myVec3 = 0.0,1.0,2.0
	vec3 temp;
	
	temp = myVec3.xyz;                 // temp = 0.0,1.0,2.0
	temp = myVec3.xxx;                 // temp = 0.0,0.0,0.0
	temp = myVec3.zyx;                 // temp = 2.0,1.0,0.0

四、使用数组下标"[]"运算符访问

除了使用"." 运算符时,使用数组下标"[]"运算符访问。

在数组下标中,元素[0]对应于x,元素[1]对应于y,等等。

矩阵被看成由一些向量组成。例如,mat2可以看做两个vec2,mat3可以看做3个vec3,等等。

对于矩阵,单独的列可以用数组下标运算符"[]"选择,然后每个向量可以通过向量访问行为来访问。

下面展示一些访问矩阵的例子:

 mat4 myMat4 = mat4(1.0);    // Initialize diagonal to 1.0 (identity)
    
 vex4 col0 = myMat4[0];      // Get col0 vector out of the matrix 
 float m1_1 = myMat4[1][1];  // Get element at [1][1] in matrix 
 float m2_2 = myMat4[2].z;    // Get element at [2][2] in matrix 

以上是关于我的OpenGL学习进阶之旅关于OpenGL的着色器的向量和矩阵分类的访问方式: xyzw/rgba/stpq以及数组下标的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (下)

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (上)

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (上)

我的OpenGL学习进阶之旅关于OpenGL的着色器的向量和矩阵分类的访问方式: xyzw/rgba/stpq以及数组下标

我的OpenGL学习进阶之旅关于OpenGL的着色器的向量和矩阵分类的访问方式: xyzw/rgba/stpq以及数组下标

我的OpenGL学习进阶之旅着色器和程序(下)------ 程序对象