gpt4 book ai didi

c++ - OpenGL 纹理的奇怪事件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:06 25 4
gpt4 key购买 nike

我相当确定我的纹理加载没有问题,但是,我无法渲染它们!

我启用 GL_TEXTURE_2D在我初始化 GL 时。然后我用这个函数加载纹理:

GLuint loadTexture(std::string filepath)
{
SDL_Surface *image;
if ( image = SDL_LoadBMP( filepath.c_str() ) )
{
GLuint tex_id;
glGenTextures( 1, &tex_id );
glBindTexture( GL_TEXTURE_2D, tex_id );

glTexImage2D( GL_TEXTURE_2D, 0, 3, image->w,
image->h, 0, GL_RGB,
GL_UNSIGNED_BYTE, image->pixels );

SDL_FreeSurface(image);

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );

textures.emplace(getFilename(filepath), tex_id);

glBindTexture(GL_TEXTURE_2D, 0);

return tex_id;
}
else
{
// std::cout << "[!!] Could not open " << filepath << "! \n";
return -1;
}
}

加载纹理,然后将纹理名称放置在以文件名为键的贴图中。该 map 是全局定义为 std::map <std::string, GLuint> textures .我可以遍历 map 并验证 GL 是否正确分配了纹理名称。最后,我继续绘制我的四边形:

glBindTexture(GL_TEXTURE_2D, textures["MY_IMAGE.BMP"]);

glBegin(GL_QUADS);

glTexCoord2f(0.0, 0.0);
glVertex3d(0.0, 0.0, iNode->verticies[1]);

glTexCoord2f(1.0, 0.0);
glVertex3d(1.0, 0.0, iNode->verticies[2]);

glTexCoord2f(1.0, 1.0);
glVertex3d(1.0, 1.0, iNode->verticies[3]);

glTexCoord2f(0.0, 1.0);
glVertex3d(0.0, 1.0, iNode->verticies[4]);

glEnd();

一些值得注意的事情:

  • 这些四边形的颜色在绘制之前就已经定义好了。如果我注释掉所有格式的颜色定义 glColor3ub(r, g, b) ,四边形呈现黑色。
  • 如果我调用 glIsTexture(textures["MY_IMAGE.BMP"]) ,它返回错误。
  • 纹理名称仍正确存储在 map 中。
  • 我正在使用 OpenGL 2.1。

纹理是否以某种方式在内部被删除?我的渲染有问题吗?

如果需要,我愿意提供更多代码。

编辑:我不知道我做了什么......现在我的渲染看起来像这样:enter image description here

最佳答案

来自SDL_LoadBMP文档:

Note: When loading a 24-bit Windows BMP file, pixel data points are loaded as blue, green, red, and NOT red, green, blue (as one might expect).

因此提供给glTexImage2D的格式参数需要是GL_BGR

关于c++ - OpenGL 纹理的奇怪事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com