关于OpenGL纹理尺寸的坑 - 图像行偏移,出现异色条纹

在学习OpenGL时遇到纹理显示错误,原因为图片宽度不是4的倍数,导致数据对齐问题。解决方案是将图片尺寸调整为最接近的4的倍数宽度,从而保证正确显示。此问题可能因OpenGL版本或硬件差异引起,但高度无特定要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习OpenGL时想简单创建一个纹理,但马上就出现错误。

错误效果如下:错误图片
原图如下:
原图
由于之前没有碰过这种问题,费了好大一番功夫才找到问题所在。
原始图片尺寸为210*220,OpenGL版本与教程一致,为3.3,把像素值打印出来观察之后发现,传入glTexImage2D的uchar data在每一行的结尾都会有两个数据被忽略而导致图片各行的位置偏移和颜色问题。
图片宽度为210,三通道,每个通道一字节,在图片data中按理来说每行应该是630个字节,观察发现第二行是从index = 632开始的,而不是index = 630…到这时才想起可能是OpenGL对纹理大小的要求导致的问题。虽然之前了解到有说OpenGL要求纹理的宽高必须是2的幂次方,但这张图片的宽高都为偶数。比较了几张图片的情况,发现宽度必须为4的倍数才能正常显示,而高度没有要求,可能是OpenGL版本不同或硬件不同导致的差异?

总结:
看到类似的问题可以先尝试下改变传入的纹理尺寸,本次的问题可以先将图片resize,放大或缩小为最接近的四的倍数宽度,再将图片的data传给glTexImage2D就能解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值