无法获取要在 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);
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 无法获取要在 OpenGL ES2 中显示的 RGB 纹理
- 如何在C++显示 2D RGB 矩阵的图像
- 如何创建一个窗口来显示RGB kinect摄像头
- 开放源代码YUV420到RGB的源代码或直接显示
- OpenSceneGraph是否可以使用更少的字节来显示RGB颜色