gpt4 book ai didi

c++ - OpenGL - SOIL 无法加载 JPG 或 PNG 图像

转载 作者:行者123 更新时间:2023-11-30 04:49:16 26 4
gpt4 key购买 nike

我正在尝试在 OpenGL 中制作上下文加载器,但无法让 SOIL 加载图像。

代码如下:

Texture2D TextureLoader::loadSprite(const char* path)
{
int width, height;
GLuint texture = SOIL_load_OGL_texture(path, SOIL_LOAD_RGBA, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y);

if (texture == 0)
{
Texture2D failedTexture;
return failedTexture;
}

glBindTexture(GL_TEXTURE_2D, texture);

glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glBindTexture(GL_TEXTURE_2D, 0);

Texture2D texture2d(texture, width, height);
return texture2d;
}

它总是在 texture == 0 检查时失败。图像文件与构建项目时生成的可执行文件位于同一目录中。我已经尝试过 PNG 和 JPG,但两者都不适用。

最佳答案

不管您怎么想,SOIL_load_OGL_texture 几乎肯定不会检查可执行文件的目录。相对路径是相对于 current working directory的过程。根据您的描述,我假设您使用的是 Visual Studio IDE。默认情况下,Visual Studio 在运行程序时会使用项目文件的目录作为工作目录。您可以在项目属性 > 调试 > 工作目录中更改该设置。我建议将此更改为您计划在其中运行完成的应用程序的任何目录。

如果您确实想指定相对于可执行文件路径的图片路径,那么我建议您改用绝对路径。遗憾的是,无法在标准 C++ 中可靠地找到您的可执行文件的路径。在 Windows 上,您可以使用 GetModuleFileName() .查看this question有关此主题的更多信息。获得可执行文件的绝对路径后,将路径提取到目录并附加文件名。如果可以使用 C++17,std::filesystem可以帮助您处理路径……

关于c++ - OpenGL - SOIL 无法加载 JPG 或 PNG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495754/

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