在跟随learnOpengl教程绘制纹理时发现了一个问题。原本彩色纹理绘制出来却是黑白的,且和原图像差距很大。如图。
可以看出显示的纹理并不正确。
在确保顶点着色器和片段着色器正确的情况下。我按照网上的说法修改了图片大小为128*128保证是2的倍数。这也没有解决问题。
接着我查询了png图片的颜色通道,发现是RGBA的通道。但是在加载的时候我只用到了RGB通道。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, widthTex, heightTex, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
于是我把GL_RGB换成GL_RGBA就可以解决问题了。
验证一下猜想。
换了个png图片,并设置GL_RGB,原图和绘制的结果对比
当设置GL_RGBA时
另外,jpg图像只有RGB三个通道,只用设置为GL_RGB。设置为GL_RGBA反而会出错。因此设置纹理的时候需要根据纹理颜色通道来设置GL_****。
注意到图片是反转的。这是因为,原图像0.0在左上,opengl中在左下导致的。解决办法如下
stbi_set_flip_vertically_on_load(true);//在加载纹理前加上这个语句
unsigned int texture;
int widthTex, heightTex, nrChannelsTex;
unsigned char* data = stbi_load("texture/s5.jpg", &widthTex, &heightTex, &nrChannelsTex, 0);
标签:设置,widthTex,纹理,RGB,初见,RGBA,LearnOpengl,GL From: https://www.cnblogs.com/flippedBlogs/p/17994271