如何显示具有 opengl 纹理的灰度图像
How do I display a grayscale image with opengl texture
我正在尝试创建一个要显示的纹理。我有 wxh 数组,其中每个像素是 1 个字节。我看过我可以将灰度图像与OpenGL glTexImage2D功能一起使用吗?但我不确定目前如何实施它。看起来GL_LUMINANCE已被弃用,我需要独立处理单通道.我不确定我应该如何尝试这个
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width, image_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);
我尝试将GL_RGBA更改为其他格式,例如GL_R https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml。我仍然无法显示图像。有人有什么建议吗?
如果您有一个具有 1 个颜色通道的源纹理,则可以使用格式GL_RED
和基本内部格式GL_RED
:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, image_width, image_height,
0, GL_RED, GL_UNSIGNED_BYTE, image_data);
GL_TEXTURE_SWIZZLE_G
和GL_TEXTURE_SWIZZLE_B
设置纹理参数(见glTexParameteri
(,以从红色通道读取绿色和蓝色:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
请注意,当图像加载到纹理对象时,可能GL_UNPACK_ALIGNMENT
必须设置为 1:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, ...);
默认情况下,参数为 4。这意味着假定图像的每一行都与 4 的倍数对齐。如果图像数据紧密打包,则必须更改对齐方式。
如果您使用着色器程序,那么通过 Swizzling 也可以实现相同的效果。 例如:
vec3 color = texture(u_texture, uv).rrr;
相关文章:
- 如何显示具有 opengl 纹理的灰度图像
- 无法使 opengl 纹理正常工作
- 现代OpenGL纹理金字塔
- OpenGL:纹理渲染被卡住
- 如何使用Qt多媒体和C++将.mp4视频从OpenGL纹理中保存出来
- 在某些情况下,多个 OpenGL 纹理不起作用?
- 如何将硬编码图像加载到 OpenGL 纹理中
- OpenGL 纹理会导致 ImGUI 窗口永久失焦
- 我如何将Win32窗口渲染到OpenGL纹理
- 将Pixeldata渲染到OpenGL纹理四边形中
- OpenGL纹理闪烁/有时在窗口大小上移动
- OpenGL 纹理坐标不起作用
- OpenGL 纹理状态使用警告:
- OpenGL纹理未显示
- OpenGL纹理不呈现
- 获取 OpenGL 纹理中特定像素的颜色
- C++ / OpenGL:纹理到像素图示例 - 缩小转换误差
- OpenGl 纹理拉扯
- OpenGL纹理格式,为OpenGL创建图像/纹理数据
- 创建原始OpenGL纹理数据(C++)