2014-10-01 198 views
0

我具有存儲在如何將浮點矩陣作爲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

回答

1

對於具有任意浮點數的通用矩陣,以及需要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

相關問題