【问题标题】:Rendering on a 48 bit rgb image using OpenGl使用 OpenGL 在 48 位 rgb 图像上渲染
【发布时间】:2014-10-30 00:55:00
【问题描述】:

我有一个 16 位灰度图像,我想在上面绘制注释。 最初我从 Direct 2d 开始,后来我意识到在 Direct 2d 中无法渲染 16 位/通道

后来我转向 Open Gl,现在我无法得出结论 Open gl 是否支持 16 位/通道图像的渲染。我研究了帧缓冲区对象。还有 mesa3d 库

【问题讨论】:

    标签: image opengl direct2d


    【解决方案1】:

    是的,OpenGL 支持每个组件具有 16 位的渲染目标。以下来自OpenGL 3.3规范,是支持DX10级别硬件的最新版本。

    您可以通过访问 www.opengl.org 并单击靠近左上角的“文档”菜单中的“OpenGL 注册表”条目来找到规范文档。这会将您带到https://www.opengl.org/registry。在该页面上,您可以查看/下载 PDF 格式的所有规范文档。

    在 3.3 规范中,关键信息位于第 3.9 节(纹理)第 142/143 页的必需的纹理格式下。在纹理和渲染缓冲区颜色格式列表(其中“渲染缓冲区”表示可以渲染的格式),您会发现:

    • RGBA16
    • RG16
    • R16

    这些是具有 4、2 和 1 个分量的 16 位/分量格式。

    仅纹理颜色格式在此下方包括:

    • RGB16

    这是具有 3 个组件的 16 位/组件格式。

    因此,您询问的确切 48 位 RGB 格式结果不是作为渲染目标有效。但以使用更多内存为代价,64 位 RGBA 格式应该可以正常工作。

    【讨论】:

    • 那么基本的工作流程应该是什么。我有原始的 16 位灰度图像。我首先创建一个帧缓冲区。并用灰度图像填充它。通过复制制作 64 位渲染目标rg abd b 中的相同像素值并将 alpha 值设置为 1.then?
    • @user3845376:帧缓冲区是您绘制的地方。您的图像进入每个通道的 16 位 纹理。然后绘制三角形并从片段着色器中的纹理中获取。要避免在使用 1:1 缩放级别时过滤图像,请使用 texelFetch 函数。对于其他缩放级别,请使用常规的texture GLSL 纹理访问函数。
    • 谢谢 datenwolf,它真的帮助了我昨天才开始使用 OpenGL。你知道我可以用它来绘制 16 位灰度图像的任何其他库吗?
    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    相关资源
    最近更新 更多