0

我有std::container以下格式的图像数据:

struct C
{
    float r;
    float g;
    float b;
    float a;
}

所以它看起来像:

std::vector<C> colours(width*height);

其中宽度和高度是我的图像的大小。

现在,我想将其推送到 OpenGL 中的纹理中。

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA,GL_FLOAT,colours.data());

(总共有 6 个,我的立方体贴图的每一侧都有一个。宽度和高度也与立方体贴图的要求相同)。

但我得到一个黑色的纹理。GLIntercept 没有给我任何问题的迹象。

因此,在查看https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glTexImage2D.xml之后,我相信我应该这样称呼它:

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA32F,GL_FLOAT,colours.data());

变化是我表示我的像素数据是 32 位浮点数,每个像素有 4 个。

但是,这也给了我一个黑色纹理,以及 GLIntercept 告诉我这个调用正在生成一个GL_INVALID_ENUM.

查看相同的文档告诉我,在某些情况下glTexImage2D会导致 a GL_INVALID_ENUM,我没有遇到过。

基本上,我只想将我的 4 个浮动容器放入纹理中。

4

1 回答 1

1

我认为你应该尝试

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA32F,
             width, height, 0, GL_RGBA, GL_FLOAT, colours.data());

似乎您使用internalformatformat错误的方式。

于 2015-04-06T08:21:07.377 回答