 齐次法( homogeneous notation )表示3D坐标: (X, Y, Z, 1)
 GLSL 数据类型中,Vec4 可以通过齐次法来表达点的坐标,同理 vec3 就是含有3个元素的元组
 GLSL 语言中,数据类型mat4 表示 4 x 4 的矩阵
 GLM 中,有一个类 class 叫 mat4,表示 4 x 4 的矩阵
在这里插入图片描述

 单位矩阵:identity matrix

 在 GLM中,调用函数 glm::mat4 m(1.0f) 创造一个4x4 的单位矩阵,叫m

 转置矩阵,求 mat4的转置矩阵

		GLM中:`glm::transpose(mat4)`
			GLSL中:`transpose(mat4)`

 矩阵加法,对应位置的元素相加

			GLSL中,“`+`”

 矩阵右乘点左边,生成新的点坐标

在这里插入图片描述
 在 GLSL 和 GLM中用 “ * ”来表示矩阵相乘
 以下两个式子相等,

在这里插入图片描述
在这里插入图片描述
 逆矩阵,在GLM和GLSL中都是 mat4.inverse()

 变换矩阵

			平移		translation
			旋转		rotation
			缩放矩阵	scale
			投影矩阵	projection
			目视		look-at

 平移矩阵 translation

在这里插入图片描述
 其中,第四列的 Tx,Ty,Tz,是平移过程中的增量
 GLM中有函数能构造平移矩阵,如 mat4 = glm::translate(x,y,z) , 然后 mat4 * vec4 得到平移后的矩阵

 缩放矩阵 scaling

在这里插入图片描述
 GLM 的缩放函数:mat4 = glm::scale(x,y,z); mat4 * vec4;
 左手坐标系和右手坐标系的变换矩阵(与缩放矩阵同形式):
在这里插入图片描述

 旋转矩阵涉及一个坐标轴(x,y, z)和一个角度 θ

			GLM 的函数表示为: `glm::rotate(mat4, θ, x, y, z)`    // 创造经过(0,0,0)和(x,y,z)的轴线,绕着该轴旋转θ角度

在这里插入图片描述
 如果绕空间中的任意一个轴旋转,有三个步骤:
 ① 将这个轴线平移至经过原点
 ② 物体绕着新轴线进行旋转θ角度
 ③ 根据轴线的平移偏移量,将物体反向平移

 向量 vector

			向量可以表示为 A(u,v,w) and B(x,y,z):
				A ± B = (u ± x, v ± y, w ± z) ;
				glm: `vec3 ± vec3` 
				GLSL: `vec3 ± vec3`
			求单位向量
				glm: `normalize(vec3) or normalize(vec4)`
				GLSL: `normalize(vec3) or normalize(vec4)`
			标量积
				A ● B = ux + vy + wz 
				glm:`dot(vec3,vec3) or dot(vec4,vec4)`
				GLSL: `dot(vec3,vec3) or dot(vec4,vec4)`
			向量积

在这里插入图片描述

				A x B = (vz-wy, wx-uz, uy-vx) 
				glm: `cross(vec3,vec3)` 
				GLSL: `cross(vec3,vec3)`
			长度:GLSL and GLM : `length()`

 视觉空间,eye space

在这里插入图片描述
OpenGL有一个固定在远点的相机,面向z的负半轴
在这里插入图片描述

		世界坐标系下,有点Pw,需要求该点到以摄像机为坐标系的相机空间中的点坐标 Pc

在这里插入图片描述

思路是:Pw 先平移,再旋转
 viewing transform matrix 检视变换矩阵 V: 矩阵中既包括旋转也包括平移信息
 V 是由 平移矩阵 T 和旋转矩阵R组成的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

 model-view (MV) matrix : MV = V * M
在这里插入图片描述

 透视矩阵 / 透视变换 perspective matrix

有四个参数:
 (a) aspect ratio, 长宽比
 (b) field of view, 视野
 © projection plane or near clipping plane, 最近投影平面
 (d) far clipping plane 最远投影平面
在这里插入图片描述
 投影矩阵的参数与矩阵
在这里插入图片描述
GLM的函数:glm::perspective() 用于生成透视矩阵

 正交投影矩阵The Orthographic Projection Matrix

		投影后,长度面积等都不变。这玩意是平行投影。

在这里插入图片描述

正交投影矩阵(平行投影)的参数有:
(a) the distance Znear from the camera to the projection plane,
(b) the distance Zfar from the camera to the far clipping plane,
© L, R, T, and B的值,其中 L和R是投影平面边缘最左边和最右边的x轴坐标;T和B是投影平面边缘最顶端和底端的Y轴坐标
以下是平行投影变换矩阵
在这里插入图片描述

 LOOK-AT MATRIX 视场矩阵

在这里插入图片描述
在这里插入图片描述
相关函数:glm::lookAt()

自定义矩阵

mat4 translationMatrix = mat4(1.0, 0.0, 0.0, 0.0,// 注意这是最左边一列,不是最上面一行
												0.0, 1.0, 0.0, 0.0,
												 0.0, 0.0, 1.0, 0.0, 
													tx, ty, tz, 1.0 );
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐