0

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

每次图形更改时,我都会将 R、G、B 和 A 信息提取为每个像素的字节,并以 ARGB 顺序将其写入 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);

在此先感谢您的帮助

4

1 回答 1

0

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

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

于 2011-02-06T15:13:25.057 回答