2011-12-25 44 views
1

我的問題是關於jogl。我在畫布顯示中繪製圖像。但我在圖像上繪製多邊形。我畫多邊形,但polygn是透明的,而不是顏色。我可以做嗎?jogl中的透明多邊形

gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); 
    gl.glEnable(GL.GL_BLEND); 
    BufferedImage bufferedImage = null; 
    int w = 0; 
    int h = 0; 
    try { 

我得到圖像以及其寬度和高度

 bufferedImage = ImageIO.read(OpenGLFuncition.class.getResource("kibris.png")); 
     w = bufferedImage.getWidth(); 
     h = bufferedImage.getHeight(); 
    } catch (IOException ex) { 
    } 

我創造的圖像區域

WritableRaster raster = 
      Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, 
      w, 
      h, 
      4, 
      null); 

我設置圖像的繪圖

ComponentColorModel colorModel = 
      new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), 
      new int[]{8, 8, 8, 8}, 
      true, 
      false, 
      ComponentColorModel.OPAQUE, 
      DataBuffer.TYPE_BYTE); 
    BufferedImage dukeImg = 
      new BufferedImage(colorModel, 
      raster, 
      false, 
      null); 

圖形中的顏色

Graphics2D g = dukeImg.createGraphics(); 
    g.drawImage(bufferedImage, null, null); 
    DataBufferByte dukeBuf = 
      (DataBufferByte) raster.getDataBuffer(); 
    byte[] dukeRGBA = dukeBuf.getData(); 
    ByteBuffer bb = ByteBuffer.wrap(dukeRGBA); 
    bb.position(0); 
    bb.mark(); 
    gl.glBindTexture(GL.GL_TEXTURE_2D, 13); 
    gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1); 
    gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP); 
    gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP); 
    gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); 
    gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); 
    gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE); 
    gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, w, h, 0, GL.GL_RGBA, 
      GL.GL_UNSIGNED_BYTE, bb); 
    int left = 0; 
    int top = 0; 
    gl.glEnable(GL.GL_TEXTURE_2D); 
    gl.glBindTexture(GL.GL_TEXTURE_2D, 13); 
    gl.glBegin(GL.GL_POLYGON); 
    gl.glTexCoord2d(0, 0); 
    gl.glVertex2d(left, top); 
    gl.glTexCoord2d(1, 0); 
    gl.glVertex2d(left + w, top); 
    gl.glTexCoord2d(1, 1); 
    gl.glVertex2d(left + w, top + h); 
    gl.glTexCoord2d(0, 1); 
    gl.glVertex2d(left, top + h); 
    gl.glEnd(); 

多邊形繪圖

for (int i = 0; coordinateLoc.length - 1 > i; i++) { 
      gl.glBegin(GL.GL_POLYGON); 
      gl.glColor3ub(coordinateLoc[i].get(coordinateLoc[i].size() - 1).getColourred(), coordinateLoc[i].get(coordinateLoc[i].size() - 1).getColourgreen(), coordinateLoc[i].get(coordinateLoc[i].size() - 1).getColourblue()); 
      for (CoordinateXY ca : coordinateLoc[i]) { 
       // System.out.println(ca.getCoordinateX()); 
       gl.glVertex2i(ca.getCoordinateX(), 449 - ca.getCoordinateY()); 

      } 
      gl.glEnd(); 

回答

0

你應該叫glcolor(),否則一切都將是透明的。

gl.glTexCoord2d(0, 1); 
gl.glcolor(red,green,blue,alpha); 
gl.glVertex2d(left, top + h)