gpt4 book ai didi

c++ - 无法在 OpenGL ES2 中显示 RGB 纹理

转载 作者:行者123 更新时间:2023-12-01 14:53:48 24 4
gpt4 key购买 nike

我可以使用以下代码获得 1 个纹理 channel 来显示:

    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 channel 。 texture2D为红色、绿色和蓝色 channel 返回 0。 alpha channel 将对应的值返回给纹理坐标。
因为在片段着色器中,采样器的 alpha channel 被读取:
(见 Swizzling)

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 个颜色 channel ,但所有纹素的 alpha channel 都是 1。

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

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

或者

gl_FragColor = texture2D(tex, texpos);

关于c++ - 无法在 OpenGL ES2 中显示 RGB 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59655150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com