2014-03-07 4 views
2

투명 배경을 갖기 위해 내 GLCanvas를 작성해야합니다. 내가 받고 싶은 효과는 검은 배경이 아니라 JFrame 배경에서 회색이 될 것입니다. 내가 사용 capabilities.setBackgroundOpaque (거짓); 및 gl.glClearColor (0.0f, 0.0f, 0.0f, 0.0f); 하지만 작동하지 않습니다. 나는 같은 질문 (Jogl: How to make a transparent background on com.jogamp.opengl.swt.GLCanvas?)이 있었지만 그 HUD가 어떻게 작동하는지 이해하지 못한다. 게다가, 나는 단지 왜 metod capabilities.setBackgroundOpaque (false); 작동하지 않습니다.JOGL 투명 배경

여기에 오히려 모두 setOpaque (false)의 호출, JInternalFrame의에 넣어하는 GLJPanel를 사용하여 내 코드

public class JOGL implements GLEventListener { 

private static final int FPS = 30; 

@Override 
public void display(GLAutoDrawable gLDrawable) { 

    GL2 gl = gLDrawable.getGL().getGL2(); 

    // Clear the drawing area 
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 
    // Reset the current matrix to the "identity" 
    gl.glLoadIdentity(); 

    // Move the "drawing cursor" around 
    gl.glTranslatef(-1.5f, 0.0f, -6.0f); 

    // Drawing Using Triangles 
    gl.glBegin(GL.GL_TRIANGLES); 
    gl.glColor3f(1.0f, 0.0f, 0.0f); // Set the current drawing color to red 
    gl.glVertex3f(0.0f, 1.0f, 0.0f); // Top 
    gl.glColor3f(0.0f, 1.0f, 0.0f); // Set the current drawing color to green 
    gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left 
    gl.glColor3f(0.0f, 0.0f, 1.0f); // Set the current drawing color to blue 
    gl.glVertex3f(1.0f, -1.0f, 0.0f); // Bottom Right 
    // Finished Drawing The Triangle 
    gl.glEnd(); 

    gl.glFlush(); 

} 

@Override 
public void init(GLAutoDrawable glDrawable) { 
    GL2 gl = glDrawable.getGL().getGL2(); 
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
} 

@Override 
public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height) { 

} 

@Override 
public void dispose(GLAutoDrawable gLDrawable) { 
} 

public static void main(String[] args) { 

    GLCapabilities capabilities = new GLCapabilities(null); 
    capabilities.setBackgroundOpaque(false); 
    final GLCanvas canvas = new GLCanvas(capabilities); 
    final JFrame frame = new JFrame("JOGL - test obj loading"); 
    frame.setLayout(null); 
    final FPSAnimator animator = new FPSAnimator(canvas, FPS); 
    canvas.addGLEventListener(new JOGL()); 

    JPanel p = new JPanel(); 

    frame.add(canvas); 
    frame.add(p); 
    p.setBackground(Color.red); 
    canvas.setBounds(0, 0, 1024, 768); 
    p.setBounds(0, 0, 100, 500); 
    frame.setSize(1040, 900); 
    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
      animator.stop(); 
      frame.dispose(); 
      System.exit(0); 
     } 
    }); 
    frame.setVisible(true); 
    animator.start(); 
    canvas.requestFocus(); 

} 

}

답변

0

입니다. JOGL을 기반으로하는 이클립스 RCP 애플리케이션에서 GUI의 나머지 부분 위로 이동할 수있는 투명한 "창"을 만들었습니다.

P.S : 이미 JOGL에는 2 개의 WaveFront OBJ 로더가 있으며 가장 강력한 것은 JogAmp's Ardor3D Continuation입니다.

0

저는 jogl을 처음 접했을 때 jogl을 사용할 때 비슷한 문제가 있었지만 마침내 한 가지 해결책을 찾았습니다. 다음 코드를 사용하여 투명한 배경을 가진 GLJPanel 개체를 만듭니다.

//Indeed, use GLJPanel instead of GLCanvas 
GLProfile glp = GLProfile.getDefault(); 
GLCapabilities glcap = new GLCapabilities(glp); 
glcap.setAlphaBits(8); 
GLJPanel pane = new GLJpanel(glcap); 
pane.setOpaque(false); 
+0

이 게시물은 코드가 너무 짧기 때문에 자동으로 품질이 좋지 않음으로 표시됩니다. 문제 해결 방법을 설명하는 텍스트를 추가하여 확장 해 주시겠습니까? – gung

+0

사실 새 소식은 거의 없습니다. 내 조언을 따랐을뿐입니다. http://stackoverflow.com/a/22280648/458157 – gouessej