gpt4 book ai didi

C++ SOIL 不加载小图像

转载 作者:太空狗 更新时间:2023-10-29 19:51:06 32 4
gpt4 key购买 nike

我在尝试使用 SOIL 为我的像素艺术游戏加载较小的纹理时遇到了一些问题。这是加载 40 x 40 图像时的结果: enter image description here

enter image description here

但是当我切换到 30 x 40 时: enter image description here

enter image description here

当宽度小于高度时,我检查了我的代码是否有任何问题,对于 40 x 50 一切都很好。我用 Windows 的图像查看器检查了 30 x 40,看起来也不错。当使用坐标轴设置位置时,可能会以任何方式影响装载机的唯一一件事,但是,它工作正常。这是加载纹理的代码:

glGenTextures(1, &actor.texture);
glBindTexture(GL_TEXTURE_2D, actor.texture);
unsigned char* image = SOIL_load_image(("App/Textures/" + name + ".png").c_str(), &width, &height, 0, SOIL_LOAD_RGB);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
SOIL_free_image_data(image);
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_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

最佳答案

当图像加载到纹理对象时,然后 GL_UNPACK_ALIGNMENT必须设置为 1:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

请注意,默认情况下该参数为 4。这意味着假设图像的每一行都对齐到 4 的倍数的大小。由于图像数据被紧密打包并且每个像素的大小为 3字节,则必须更改对齐方式。

当图像的大小为 40 x 50 时,一行的字节大小为 120,可以被 4 整除。
但是如果图片的尺寸是30 x 40,那么一行的字节大小就是90,不能被4整除。

关于C++ SOIL 不加载小图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55208514/

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