有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    我的输出是一个整数数组,可以将其拆分为4个单字节的RGBA值。然而,OpenGL希望它们采用签名格式,因此01111111是最高值,10000000是最低值。 Graphics2D对象的Java输出是无符号的,所以值从00000000(最低)到11111111。 几次操作之后,它现在开始工作了