java - OpenGL 中透明对象中的三角形/线条

标签 java opengl jogl

当我绘制具有透明纹理的平面(例如房屋的 window )时,我看到了不应该出现的线条或三角形。我该如何解决这个问题?

triangles
(来源:troll.ws)

这是我用来绘制一个窗口的方法。我暂时启用混合以使窗口透明。

 static void drawWindow(int startX, int startY, int endX, int endY) {

    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    Textures.window.bind();
    glPushMatrix();
    glTranslatef(startX, startY, 0);

    glBegin(GL_QUADS);
    glTexCoord2d(1, 1);
    glVertex3d(0, 0, 0);
    glTexCoord2d(0, 1);
    glVertex3d(endX - startX, endY - startY, 0);
    glTexCoord2d(0, 0);
    glVertex3d(endX - startX, endY - startY, 200);
    glTexCoord2d(1, 0);
    glVertex3d(0, 0, 200);
    glEnd();
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_BLEND);

    glPopMatrix();
}

最佳答案

这是由于打开了多边形平滑而导致的,这会导致 GL 以不同的方式渲染多边形的边缘,从而导致 Alpha 混合出现问题。

这是一种过时的 AA 形式,因此最好将其关闭,并使用全场景抗锯齿方法,例如 MSAA 或其他类似技术。

标准建议也适用 - 固定功能管道已过时且已弃用,通常不推荐。

关于java - OpenGL 中透明对象中的三角形/线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298140/

相关文章:

java - 从 Maven 阴影 .jar 执行时库路径错误

java - 如何通过短信传递不同的字符集?

java - 如何使用多部分/表单数据?

java - 如何从一长串连续命名的方法或类中灵活选择单个方法或类

opengl - glBindAttribLocation,着色器中不存在名称参数

java - 尽管链接和验证成功,为什么着色器程序无法编译?

java - 使用 JOGL 截图

java - 我可以使用什么方法通过 Java 配置/更新弹性负载均衡器?

opengl - 访问片段着色器的RGB和深度缓冲区: GLSL

c++ - 如何将一个 int 数组发送到我的着色器