用来构建矩阵变换的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 }

 

posted @ 2024-04-09 08:53  禅元天道  阅读(26)  评论(0编辑  收藏  举报