我正在使用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);
提前感谢您的帮助
答案 0 :(得分:0)
问题是OpenGL期望的像素数据的格式。
我的输出是一个整数数组,我可以分成RGBA的4个单字节值。但是,OpenGL期望它们采用签名格式,因此01111111是最高的,10000000是最低值。 我对Graphics2D对象的Java输出是无符号的,因此值从00000000(最低)到11111111。 稍后进行一些操作它现在正在运行。