java OpenGL帧缓冲区操作,使用Alpha通道绘制像素失败
我正在用OpenGL和JOGL处理帧缓冲区。我有一个图形对象,我在其中绘制
每次图形发生变化时,我都会将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 楼答案
问题是OpenGL期望的像素数据的格式
我的输出是一个整数数组,可以将其拆分为4个单字节的RGBA值。然而,OpenGL希望它们采用签名格式,因此01111111是最高值,10000000是最低值。 Graphics2D对象的Java输出是无符号的,所以值从00000000(最低)到11111111。 几次操作之后,它现在开始工作了