为什么第一个代码有效,而不是第二个?
代码在顶点着色器中。
第一个代码:

gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(Position, 1.0);

第二个代码:
mat4 View = mat4(
        ViewMatrix[0][0], ViewMatrix[1][0], ViewMatrix[2][0], ViewMatrix[3][0],
        ViewMatrix[0][1], ViewMatrix[1][1], ViewMatrix[2][1], ViewMatrix[3][1],
        ViewMatrix[0][2], ViewMatrix[1][2], ViewMatrix[2][2], ViewMatrix[3][2],
        ViewMatrix[0][3], ViewMatrix[1][3], ViewMatrix[2][3], ViewMatrix[3][3]
    );

gl_Position = ProjectionMatrix * View * ModelMatrix * vec4(Position, 1.0);

最佳答案

从关于矩阵构造函数的GLSL规范:
矩阵组件将按列主顺序构造和使用。
前4个浮点数定义新矩阵的第一个列,但要指定它的第一行。您正在将View设置为转置ViewMatrix
注意,这完全违反了C语法和数组约定。

关于c - 在VertexShader中使用mat4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24121234/

10-10 20:55