gpt4 book ai didi

c++ - 使用 SOILs OGL 函数和 OpenGL 加载纹理

转载 作者:太空狗 更新时间:2023-10-29 21:45:43 27 4
gpt4 key购买 nike

我有一个函数可以使用 SOIL 从 JPEG 图像加载纹理。

到目前为止,我一直在使用 SOIL_load_image() 函数加载纹理,然后使用 glTexImage2D 将图像提供给 OpenGL(参见下面的代码)。然而!我的纹理是颠倒的,所以我想改用 SOIL_load_OGL_texture() 并提供 SOIL_FLAG_INVERT_Y 来翻转图像。不过,我的问题是,我在 SOIL_load_OGL_texture() 函数中遇到了未处理的异常。

代码几乎是从文档上复制粘贴的,所以不明白为什么会出现这个错误?

(注意:我可以在我的顶点着色器中反转纹理,但我想使用 SOIL。)

老办法

int width;
int height;

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textures[0]);

image = SOIL_load_image(filename, &width, &height, 0, SOIL_LOAD_RGB);

if (image == NULL) {
std::cout << "An error occurred while loading image." << std::endl;
exit(EXIT_FAILURE);
}
std::cout << "Loaded first texture image" << std::endl;

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
SOIL_free_image_data(image);

我现在正在尝试什么

GLuint image;

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textures[0]);

image = SOIL_load_OGL_texture(
filename,
SOIL_LOAD_RGB,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y
);

if (image == 0)
cerr << "SOIL loading error: '" << SOIL_last_result() << "' (" << "res_texture.png" << ")" << endl;

错误

Unhandled exception at 0x0F5427FF (msvcr110d.dll) in AnotherTutorial.exe: 0xC0000005: Access violation reading location 0x00000000.

最佳答案

似乎没有使用 SOIL 的答案,所以我将发布我的解决方案:

在我做的顶点着色器中:

Texcoord = vec2(texcoord.x, 1.0-texcoord.y);
gl_Position = proj * view * model * vec4( position, 1.0 );

1.0-texcoord.y 反转图像的 y 轴。不是那么干净的解决方案,但它有效。

关于c++ - 使用 SOILs OGL 函数和 OpenGL 加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16927442/

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