用来构建矩阵变换的GLSL函数
GLSL 中用于初始化 mat4 矩阵的语法以列为单位读入值。其前 4 个参数会放入第一列,接下来 4 个参数放入下一列,直到第四列。
1 // 构建并返回平移矩阵 2 mat4 buildTranslate(float x, float y, float z) 3 { 4 mat4 trans = mat4(1.0, 0.0, 0.0, 0.0, 5 0.0, 1.0, 0.0, 0.0, 6 0.0, 0.0, 1.0, 0.0, 7 x, y, z, 1.0 ); 8 return trans; 9 } 10 11 // 构建并返回绕 x 轴的旋转矩阵 12 mat4 buildRotateX(float rad) 13 { 14 mat4 xrot = mat4(1.0, 0.0, 0.0, 0.0, 15 0.0, cos(rad), -sin(rad), 0.0, 16 0.0, sin(rad), cos(rad), 0.0, 17 0.0, 0.0, 0.0, 1.0 ); 18 return xrot; 19 } 20 21 // 构建并返回绕 y 轴的旋转矩阵 22 mat4 buildRotateY(float rad) 23 { 24 mat4 yrot = mat4(cos(rad), 0.0, sin(rad), 0.0, 25 0.0, 1.0, 0.0, 0.0, 26 -sin(rad), 0.0, cos(rad), 0.0, 27 0.0, 0.0, 0.0, 1.0 ); 28 return yrot; 29 } 30 31 // 构建并返回绕 z 轴的旋转矩阵 32 mat4 buildRotateZ(float rad) 33 { 34 mat4 zrot = mat4(cos(rad), -sin(rad), 0.0, 0.0, 35 sin(rad), cos(rad), 0.0, 0.0, 36 0.0, 0.0, 1.0, 0.0, 37 0.0, 0.0, 0.0, 1.0 ); 38 return zrot; 39 } 40 41 // 构建并返回缩放矩阵 42 mat4 buildScale(float x, float y, float z) 43 { 44 mat4 scale = mat4(x, 0.0, 0.0, 0.0, 45 0.0, y, 0.0, 0.0, 46 0.0, 0.0, z, 0.0, 47 0.0, 0.0, 0.0, 1.0 ); 48 return scale; 49 }