繁体   English   中英

无法在 OpenGL ES2 中显示 RGB 纹理

[英]Cannot get RGB texture to display in OpenGL ES2

我可以使用以下代码显示纹理的 1 个通道:

    glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, image_width, image_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, image_grayscale);
    point bbox[4] = {
        { -0.5, 0.5, 0, 0 },
        { 0.5, 0.5, 1, 0 },
        { -0.5, -0.5, 0, 1 },
        { 0.5, -0.5, 1, 1 },
    };
    glBufferData(GL_ARRAY_BUFFER, sizeof bbox, bbox, GL_DYNAMIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    glVertexAttribPointer(uniform_color, 4, GL_FLOAT, GL_FALSE, 0, bbox);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

但是当我改变为

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, button_image_width, button_image_height, 0, GL_RGB, GL_UNSIGNED_BYTE, image_rgb);

我得到纯色而不是图像

下面是片段着色器

    GLbyte fShaderStr[] =  
       "varying vec2 texpos;                                                \n"
       "uniform sampler2D tex;                                              \n"
       "uniform vec4 color;                                                 \n"
       "void main()                                                         \n"
       "{                                                                   \n"
       "   gl_FragColor = vec4(1, 1, 1, texture2D(tex, texpos).a) * color;  \n"
       "}         

如何绘制RGB纹理?

当你做

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, image_width, image_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, image_grayscale);

结果是一个纹理图像,只有一个 alpha 通道。 texture2D为红色、绿色和蓝色通道返回 0。 alpha 通道返回纹理坐标对应的值。
因为在片段着色器中,采样器的 alpha 通道被读取:
(见 调和

texture2D(tex, texpos).a

但是当你这样做时

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, button_image_width, button_image_height, 0, >GL_RGB, GL_UNSIGNED_BYTE, image_rgb)

然后纹理图像有 3 个颜色通道,但所有纹素的 alpha 通道为 1。

您必须为第二种情况调整片段着色器:

gl_FragColor = vec4(texture2D(tex, texpos).rgb, 1.0);

或者

gl_FragColor = texture2D(tex, texpos);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM