2011-01-30 4 views
0

OpenGL 및 JOGL이있는 프레임 버퍼를 사용하고 있습니다. 내가 그릴 그래픽 개체가 있습니다.OpenGL 프레임 버퍼 조작, Alpha 채널에서 drawPixels이 실패 함

그래픽이 변경 될 때마다 R, G, B 및 A 정보를 각 픽셀의 바이트로 추출하여 A R G B 순서로 ByteBuffer에 씁니다. 나는 전환을 확인했다, 괜찮아.

GL_RGB 모드를 사용하여 drawPixels 메소드를 호출하면 지정된 좌표에 상자가 그려지고 그래픽에 어떤 색상이 있더라도 검정색이 그려집니다. GL_RGBA 모드를 사용하면 아무 것도 그려지지 않습니다. 당신의 도움에 미리

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

'ib1'은 어떻게 정의되어 있습니까? – datenwolf

+0

ib1은 이미지의 RGBA 값을 복사하는 바이트 배열을 랩하는 바이트 버퍼입니다. – Cookie

+0

실제로 대답을 찾았습니다. Java와 OpenGL의 바이트 형식이었습니다 ... 나중에 문제/해결책을 나중에 게시 할 것입니다. ... – Cookie

답변

0

문제가 있었다 픽셀 데이터는 OpenGL의 형식이 예상 :

그래서 프레임 버퍼 작업에 대한 내 코드는 IB1 이미지 데이터를 바이트 버퍼입니다 .

내 출력은 RGBA에 대해 4 개의 단일 바이트 값으로 나눌 수있는 정수 배열입니다. 그러나 OpenGL은 부호있는 형식을 원하기 때문에 01111111이 가장 높고 10000000이 가장 낮은 값입니다. Graphics2D 객체의 Java 출력에 부호가 없으므로 00000000 (최저)에서 11111111까지의 값이 표시됩니다. 나중에 몇 비트 연산이 작동합니다.

관련 문제