Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenGL中透明对象中的三角形/线_Java_Opengl_Jogl - Fatal编程技术网

Java OpenGL中透明对象中的三角形/线

Java OpenGL中透明对象中的三角形/线,java,opengl,jogl,Java,Opengl,Jogl,当我用透明纹理(例如房子的窗户)绘制平面时,我会看到线或三角形不应该出现的地方。我怎样才能解决这个问题 (来源:) 下面是我用来画一个窗口的方法。我启用临时混合以使窗口透明 static void drawWindow(int startX, int startY, int endX, int endY) { glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_M

当我用透明纹理(例如房子的窗户)绘制平面时,我会看到线或三角形不应该出现的地方。我怎样才能解决这个问题


(来源:)

下面是我用来画一个窗口的方法。我启用临时混合以使窗口透明

 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或其他类似技术


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

为什么要使用即时模式?自从vertex阵列可用以来,使用IM一直是不被鼓励的,因此近20年来一直如此。为什么你要硬编码你的几何图形呢?将几何体放入运行时加载的文件中,并使用顶点数组进行渲染。是否启用了多边形平滑?@JasonD感谢您的评论。是的,它是打开的。当我禁用它时,线路确实消失了。我应该关掉它吗?是的,它没有任何用处,给你带来了麻烦。改用更现代的抗锯齿形式(MSAA等)。