如何将浮点矩阵作为2D纹理传递给片段着色器?

问题描述:

我具有存储在如何将浮点矩阵作为2D纹理传递给片段着色器?

std::vector<float> data; 

如何在该矩阵通过为2D纹理到片段着色器NR X NC浮点值的矩阵?

我应该使用哪种内部格式和格式作为glTexImage2D()的参数?

我是否需要设置

glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glPixelStorei(GL_PACK_ALIGNMENT, 1); 

顺便说一句:我不明白GL_UNPACK_ALIGNMENT和GL_PACK_ALIGNMENT之间的区别。 我的数据紧密排列(alignment = 1)。一个命令应该足以告诉OpenGL这一点。

+0

你试过'GL_R32F'和'GL_FLOAT'吗? – genpfault 2014-10-01 20:15:05

对于具有任意浮点数的通用矩阵,以及需要32位精度的地方,我建议使用单通道32位浮点格式作为内部格式。 YOu没有指定你的目标OpenGL版本,所以我假定“合理的现代”,所以国际格式应该设置为GL_R32F。作为格式,您要使用GL_FLOAT显然,作为参数描述你的客户的数据格式。

您可以设置GL_UNPACK_ALIGNMENT任何有效值< = 4(这也是默认值)在这种情况下,由于float总是4个字节,所以每行浮点数总是4的倍数。

GL_PACK_ALIGNMENT是完全不相关的。它定义了读回像素数据的(“打包”)的对齐。

+0

谢谢derhass!使用GL_R32F的值作为红色成分进入着色器?这与GL_RED相同吗?在将它们发送给着色器之前,我必须将这些值缩放到[0,1]范围内吗? – Andy 2014-10-02 07:24:02

+0

@安迪:是的,他们会进入红色通道。不,你不需要扩展它们,你可以使用完整的浮点范围。 – derhass 2014-10-02 18:41:45