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