在VertexShader中使用mat4

时间:2014-06-09 13:20:55

标签: c opengl vertex-shader

为什么第一个代码可以工作,而不是第二个代码? 该代码位于Vertex-Shader中。

第一个代码:

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);

1 个答案:

答案 0 :(得分:2)

关于矩阵构造函数的GLSL规范:

  

将按列主要顺序构建和使用矩阵组件。

前4个浮点数定义新矩阵的第一个列,但您指定它的第一行。您正在将View设置为转置 ViewMatrix

请注意,这绝对会反映C语法和数组约定。