【问题标题】:OpenGL framebuffer operations, drawPixels fails with Alpha channelOpenGL 帧缓冲操作,drawPixels 使用 Alpha 通道失败
【发布时间】:2011-06-18 05:53:06
【问题描述】:

我正在使用 OpenGL 和 JOGL 处理帧缓冲区。我有一个 Graphics 对象,我在其中进行绘制。

每次图形更改时,我都会将 R、G、B 和 A 信息提取为每个像素的字节,并以 A R G B 顺序将其写入 ByteBuffer。我检查了转换,没问题。

如果我使用 GL_RGB 模式调用 drawPixels 方法,它会在给定坐标处绘制框,无论我的图形中有什么颜色,它都会被绘制为黑色。如果我使用 GL_RGBA 模式,它不会绘制任何内容。

所以我的帧缓冲区操作代码,ib1 是带有图像数据的字节缓冲区:

    GL gl=canvas.getGL();

    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrtho (0, canvas.getWidth(), canvas.getHeight(),0, -1.0, 1.0);
    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glDisable(GL.GL_DEPTH_TEST);
    gl.glColor3f(1, 1, 1);
    //
    gl.glRasterPos2i(0, height);
    //gl.glDrawPixels(width, height, GL.GL_RGB, GL.GL_BYTE, ib1);
    gl.glDrawPixels(width, height, GL.GL_RGBA, GL.GL_BYTE, ib1);

提前感谢您的帮助

【问题讨论】:

  • ib1 是一个字节缓冲区,它包装了一个字节数组,我将图像的 RGBA 值复制到该数组中
  • 其实我找到了答案,它是Java vs OpenGL的字节格式......我稍后会发布问题/解决方案......

标签: java opengl jogl framebuffer


【解决方案1】:

问题在于 OpenGL 期望的像素数据格式。

我的输出是一个整数数组,我可以将 RGBA 拆分为 4 个单字节值。但是,OpenGL 期望它们是有符号格式,所以 01111111 是最高的,10000000 是最低的值。 我的 Graphics2D 对象的 Java 输出是无符号的,因此值从 00000000(最低)到 11111111。 几位操作后它现在可以工作了。

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 2012-06-20
    • 2014-06-26
    • 2015-05-30
    • 2012-04-12
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多