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