如果您的源纹理具有1个颜色通道,则可以使用格式GL_RED和基本内部格式GL_RED:
1 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, image_width, image_height, |
设置纹理参数GL_TEXTURE_SWIZZLE_G和GL_TEXTURE_SWIZZLE_B(请参见glTexParameteri)以也从红色通道读取绿色和蓝色:
1 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED); |
注意,将图像加载到纹理对象时,GL_UNPACK_ALIGNMENT可能必须设置为1:
1 | glPixelStorei(GL_UNPACK_ALIGNMENT, 1); |
就是各个通道指定读取源数据的通道
默认情况下,该参数为4。这意味着假定图像的每一行对齐的大小都是4的倍数。如果图像数据紧紧包装,则必须更改对齐方式。
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
如果使用着色器程序,则可以通过Swizzling来实现。 例如。:
1 | vec3 color = texture(u_texture, uv).rrr; |