Транспаранский полигон в джогле - PullRequest
1 голос
/ 25 декабря 2011

Мой вопрос о джогле. Я рисую изображение на холсте. Но я рисую многоугольник на изображении. Я рисую многоугольник, но многоугольник прозрачен, а не цвет. Могу ли я это сделать?

 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();

1 Ответ

0 голосов
/ 22 мая 2012

Вы должны вызвать glcolor (), иначе все будет прозрачно.

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