GLSL纹理布局

时间:2018-02-16 20:50:43

标签: opengl glsl textures

矩阵的布局(行主要与列主要)如何影响它创建的GLSL纹理?着色器中对该纹理的访问是否会更改?如果是列主矩阵,我应该首先将矩阵更改为row-major,然后将其作为纹理上传到GPU?

1 个答案:

答案 0 :(得分:0)

请参阅The OpenGL Shading Language 4.6, 5.4.2 Vector and Matrix Constructors, page 101

  

要通过指定向量或标量来初始化矩阵,组件将以列主要顺序分配给矩阵元素。

JSON.stringify


这意味着如果将矩阵(mat4(float, float, float, float, // first column float, float, float, float, // second column float, float, float, float, // third column float, float, float, float); // fourth column )存储在2维4 * N,RGBA纹理的行中,如下所示:

mat4

         0           1           2           3
mat4 m0  m0[0].xyzw  m0[1].xyzw  m0[2].xyzw  m0[3].xyzw
mat4 m1  m1[0].xyzw  m1[1].xyzw  m1[2].xyzw  m1[3].xyzw
mat4 m2  m2[0].xyzw  m2[1].xyzw  m2[2].xyzw  m2[3].xyzw
mat4 m3  .....

然后你可以在着色器中读取纹理中的矩阵,如下所示:

mat4 matArray[N]; // possibly std::vector<glm::mat4>( N );

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 4, N, 0, GL_RGBA, GL_FLOAT, matArray);