2014-10-05 64 views
0

我想創建一個gl :: Texture對象使用圖像數據作爲BYTE *與下面的參數。轉換爲Cinder gl ::紋理

FreeGLUT - 我用它來創建一個2D紋理並將其綁定到一個四:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, textureWidth, textureHeight, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, data); 
glBindTexture(GL_TEXTURE_2D, 0); etc etc 

這工作得很好,但是我無法找到一個方法來創建一個煤渣GL :: Texture對象。

text = gl::Texture(loadImage(loadAsset("text.jpg"))); // works with images files 
text = gl::Texture(data, GL_RGBA8, 640, 480); // BTYE * data This gives me a grey screen - 

這似乎是最有可能的,但我不知道如何處理格式format = format();

Texture (const unsigned char *data, int dataFormat, int aWidth, int aHeight, Format format=Format()) 

我真的不知道這是如何工作的,無法在網上找到更好的教程。謝謝。

回答

1

顯然dataFormat是格式參數glTexImage2D,應該是這樣的GL_RGBAGL_RGB(或GL_BGRA_EXT爲您提供的例子)

你想要什麼是「內部格式」,這是通過Format結構設置。所以,你把它想:

gl::Texture::Format fmt; 
fmt.setInternalFormat(GL_RGBA8); 
text = gl::Texture(data, GL_RGBA, 640, 480, fmt); 

GL_UNSIGNED_BYTE格式是預先設定的煤渣包裝

有時候,這個構造它可以更容易地只看代碼,而不是試圖找到100%適用文件

+0

非常感謝。你的回答是有道理的,但當我調用gl :: draw(text,getWindowBounds());我仍然有一個灰色的背景。它使用gl :: Texture(loadImage從一個文件中工作,還有什麼我需要做不同的工作嗎?在freeGLUT中,我將紋理映射到四邊形,但我的理解是紋理應該適用於gl :: draw(as我的紋理從文件加載正確顯示) – user1546650 2014-10-05 22:33:45

+0

@ user1546650我想確保'數據'實際上指向圖像數據是相當重要的,使用您的調試器,看看這裏的值是否有意義。 – PeterT 2014-10-05 22:39:07

+0

謝謝,它看起來像剩下的問題是我的主代碼中的一個錯誤(我試圖檢查調試器,但並不是所有的確定我在找什麼:P) – user1546650 2014-10-05 23:04:35