2011-12-25 7 views
1

Мой вопрос о Джогле. Я рисую изображение на холсте. Но я рисую многоугольник на изображении. Я рисую многоугольник, но polygn прозрачен, а не цвет. Могу ли я это сделать?Transpan polygon in 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) { 
    } 

I создающих зоны изображения

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)