OpenGL帧缓冲操作,drawPixels失败,Alpha通道

时间:2011-01-30 20:58:41

标签: java opengl jogl framebuffer

我正在使用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);

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

我的输出是一个整数数组,我可以分成RGBA的4个单字节值。但是,OpenGL期望它们采用签名格式,因此01111111是最高的,10000000是最低值。 我对Graphics2D对象的Java输出是无符号的,因此值从00000000(最低)到11111111。 稍后进行一些操作它现在正在运行。