OpenGL - SOIL 无法加载 JPG 或 PNG 图像
OpenGL - SOIL won't load JPG or PNG image
我正在尝试在 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;
}
它总是在纹理== 0 检查时失败。图像文件与构建项目时生成的可执行文件位于同一目录中。我试过 PNG 和 JPG,但两者都不行。
不管你怎么想,SOIL_load_OGL_texture
几乎肯定不会检查可执行文件的目录。相对路径是相对于进程的current working directory。根据您的描述,我假设您使用的是 Visual Studio IDE。默认情况下,Visual Studio会在运行程序时使用项目文件的目录作为工作目录。您可以在项目属性 > 调试 > 工作目录中更改该设置。我建议将此更改为您计划将完成的应用程序放在 运行 中的任何目录。
如果您确实想指定相对于可执行文件路径的图片路径,那么我建议您改用绝对路径。遗憾的是,无法在标准 C++ 中可靠地找到您的可执行文件的路径。在 Windows,您可以使用 GetModuleFileName()
. Check out this question for more on this topic. Once you have the absolute path of the executable, extract the path to the directory and append your filename. If you can use C++17, std::filesystem
可以帮助您处理路径…
我正在尝试在 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;
}
它总是在纹理== 0 检查时失败。图像文件与构建项目时生成的可执行文件位于同一目录中。我试过 PNG 和 JPG,但两者都不行。
不管你怎么想,SOIL_load_OGL_texture
几乎肯定不会检查可执行文件的目录。相对路径是相对于进程的current working directory。根据您的描述,我假设您使用的是 Visual Studio IDE。默认情况下,Visual Studio会在运行程序时使用项目文件的目录作为工作目录。您可以在项目属性 > 调试 > 工作目录中更改该设置。我建议将此更改为您计划将完成的应用程序放在 运行 中的任何目录。
如果您确实想指定相对于可执行文件路径的图片路径,那么我建议您改用绝对路径。遗憾的是,无法在标准 C++ 中可靠地找到您的可执行文件的路径。在 Windows,您可以使用 GetModuleFileName()
. Check out this question for more on this topic. Once you have the absolute path of the executable, extract the path to the directory and append your filename. If you can use C++17, std::filesystem
可以帮助您处理路径…