当图像应该是透明的时,图像里面有奇怪的白色边框

时间:2015-08-15 18:35:41

标签: java opengl lwjgl

我有这段代码:

public class Main {
  private BoardHandler boardHandler;

  Main() {
    Display.setTitle(Cons.WINDOW_TITLE);
    try {
        Display.setDisplayMode(new DisplayMode(Cons.SCREEN_WIDTH, Cons.SCREEN_HEIGHT));
        Display.create();
    }
    catch (LWJGLException e) {
        e.printStackTrace();
    }

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, Cons.SCREEN_WIDTH, Cons.SCREEN_HEIGHT, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);
    glClearColor(0, 0, 0, 0);
    glEnable(GL_BLEND);
    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

    boardHandler = new BoardHandler();

    while (!Display.isCloseRequested()) {
        glClear(GL_COLOR_BUFFER_BIT);
        Clock.update();

        // game:
        boardHandler.update();

        Display.update();
        Display.sync(60);
    }
    Display.destroy();
  }

  public static void main(String[] args) {
    new Main();
  }

}

我使用此功能加载纹理:

public static Texture loadTexture(String path, String fileType) {
    Texture tex = null;
    InputStream in = ResourceLoader.getResourceAsStream(path);
    try {
        tex = TextureLoader.getTexture(fileType, in);
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    return tex;
}

我用这个函数绘制东西:

public static void drawTile(Texture tex, float x, float y, float radius) {
    tex.bind();
    glTranslated(x - radius / 2, y - radius / 2, 0);
    glBegin(GL_QUADS);
    glTexCoord2d(0, 0);
    glVertex2d(0, 0);
    glTexCoord2d(1, 0);
    glVertex2d(radius, 0);
    glTexCoord2d(1, 1);
    glVertex2d(radius, radius);
    glTexCoord2d(0, 1);
    glVertex2d(0, radius);
    glEnd();
    glLoadIdentity();
}

我画这些图像: http://imgur.com/4IZO9CC,gmpPfMM,gF1EeBs,nrv6NRR,OwLgHoM,wfGvAvr,CVEagHD,6ij24M4,pheIjuI#0

结果得到这个: http://imgur.com/pgExbTE,liEJ01d#0

X'es的绘制方式与所有其他瓷砖完全相同,但X'es在它们周围有这些丑陋的白色边框。请注意,这些白色边框位于我正在尝试绘制的图像的“内部”。白色边框内的黑色是背景,显示它应该看起来如何。

有什么问题?当图像中的这些部分是透明的时,为什么会出现白色边框?这个问题有方法解决吗?

这是我第一次尝试使用任何2D / 3D引擎绘制内容,我只是想尽可能快速修复。

1 个答案:

答案 0 :(得分:0)

我修好了!看起来像openGL(或至少我设置它的方式)由于某种原因不喜欢半透明图像。为了让白色边框消失,我所要做的就是让图像中的每个像素都完全透明或完全不透明。