0

我正在尝试使用图像数据作为 BYTE * 创建一个 gl::Texture 对象,其参数如下。

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

这很好用,但是我找不到在 Cinder 中创建 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 = format();

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

我真的不了解它是如何工作的,也无法在网上找到更好的教程。谢谢。

4

1 回答 1

1

显然dataFormat是 glTexImage2D 的格式参数,应该类似于GL_RGBAor GL_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格式是在 cinder 包装器的构造函数中预先设置的

有时只看代码而不是试图找到 100% 适用的文档会更容易

于 2014-10-05T19:47:46.593 回答