2012-04-02 60 views
1

我正在寫C射線測量儀,其結果輸出到普通的圖像文件。現在,我想將內部RGBA表示(4個整數)渲染到由GLUT提供的OpenGL窗口。RGBA的整數值,以OpenGL紋理

我已經知道我必須使用glTexImage2D來生成紋理,將該紋理分配給四邊形,然後將這個四邊形正好放在相機前面。

http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml

我遇到的問題是,我不知道我應該如何將數據提交給glTexImage2D函數:我該如何構建這個gluByte數據塊包含我的數據,從一個簡單的4未來整數RGBA表示?

+0

對於記錄,我結束了這樣做: '無符號字符*數據=(數據放在這裏在數組);' 'glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,寬度,高度,0,GL_RGBA,GL_UNSIGNED_BYTE ,數據);' – 2012-04-05 10:13:15

回答

1

如何存儲您的數據或多或少取決於您。最後三個參數爲glTexImage2D(以及其他參數)describe how your data is formatted。對於如何存儲數據存在限制(每個像素不能有超過4字節對齊的填充,並且組件必須相鄰),但是存在很多可用變體。

作爲寬度x高度x 4大小的數組,每個組件使用無符號整數:RGBARGBARGBA ...?

這是這樣做的一種方式,但它不是唯一的方法。

0

數據塊只是一個指向您的RGBA表示的指針。您需要致電glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_INT, dataBuffer);。紋理中的一行必須具有width * sizeof(GLuint)個字節才能起作用。

+0

那麼如何存儲我的數據呢?作爲寬x高x 4大小的數組,每個組件使用一個無符號整數:RGBARGBARGBA ...? – 2012-04-02 17:23:50

+0

正是。請注意,您使用的OpenGL驅動程序可能會將未簽名的整數轉換爲上傳前在內部無符號字符。爲了節省內存,您可能仍然需要手動將提示轉換爲字符。 – jfortmann 2012-04-03 16:14:50