公式
在GLSL(OpenGL Shading Language)中,vec4
类型表示一个四维向量。虽然 vec4
本身没有明确指定是行向量还是列向量,但在实际使用中,通常会根据上下文来确定其表示形式。
GLSL 中的向量和矩阵乘法
-
矩阵向量乘法:
- 当你使用矩阵和向量进行乘法运算时,GLSL 默认向量是列向量。这意味着当你写
mat4 * vec4
时,vec4
被视为一个列向量。
glslmat4 modelMatrix; vec4 position; vec4 transformedPosition = modelMatrix * position;
在这个例子中,
position
被视为一个列向量,modelMatrix
是一个4x4的矩阵,结果transformedPosition
也是一个列向量。 - 当你使用矩阵和向量进行乘法运算时,GLSL 默认向量是列向量。这意味着当你写
-
向量矩阵乘法:
- 如果你需要将向量作为行向量进行乘法运算,可以使用
vec4 * mat4
。在这种情况下,vec4
被视为一个行向量。
glslmat4 modelMatrix; vec4 position; vec4 transformedPosition = position * modelMatrix;
在这个例子中,
position
被视为一个行向量,modelMatrix
是一个4x4的矩阵,结果transformedPosition
也是一个行向量。 - 如果你需要将向量作为行向量进行乘法运算,可以使用
总结
- 默认情况下 :在GLSL中,
vec4
通常被视为列向量。 - 矩阵向量乘法 :
mat4 * vec4
表示矩阵左乘列向量。 - 向量矩阵乘法 :
vec4 * mat4
表示行向量右乘矩阵。
示例代码
glsl
// 矩阵左乘列向量
mat4 modelMatrix = mat4(
vec4(1.0, 0.0, 0.0, 0.0),
vec4(0.0, 1.0, 0.0, 0.0),
vec4(0.0, 0.0, 1.0, 0.0),
vec4(0.0, 0.0, 0.0, 1.0)
);
vec4 position = vec4(1.0, 2.0, 3.0, 1.0);
vec4 transformedPosition = modelMatrix * position;
// 行向量右乘矩阵
vec4 transformedPositionRow = position * modelMatrix;
注意事项
- 一致性:在编写着色器时,确保矩阵和向量的乘法顺序一致,避免混淆。
- 文档和注释:在代码中明确注释向量的表示形式,有助于维护和调试。
通过这些规则,你可以确保在GLSL中正确地使用向量和矩阵进行变换。