Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 所有多边形都变得透明,如何修复?_Java_Opengl_Opengl Compat - Fatal编程技术网

Java 所有多边形都变得透明,如何修复?

Java 所有多边形都变得透明,如何修复?,java,opengl,opengl-compat,Java,Opengl,Opengl Compat,我在我的项目中做了一些事情,所有的多边形都变得透明了 我在那里下载了我的旧git,一切正常,但它仍然是透明的 勾号事件: 在渲染所有多边形图形中 public void render() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0.925f, 0.98f, 0.988f, 1f); glPushMatrix(); game.rend

我在我的项目中做了一些事情,所有的多边形都变得透明了

我在那里下载了我的旧git,一切正常,但它仍然是透明的

勾号事件: 在渲染所有多边形图形中

    public void render() { 
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
       glClearColor(0.925f, 0.98f, 0.988f, 1f);

       glPushMatrix();

       game.render();

       glPopMatrix();
   }
上次更改的功能:

public void drawModel(Vector3f camLocation) {

        for (int i = 0; i < count; i++) {

            glPushMatrix();
            glTranslated(copies[i].x, copies[i].y, copies[i].z);
            glRotatef(rotations[i], 0, 1, 0);

            texture.bind();
            glEnable(GL_TEXTURE_2D);
            glBegin(GL_TRIANGLES);

            if (Stereometry.getVectorLenght(camLocation, copies[i]) < lodRange) {
                k = 0;
            } else {
                k = m.length - 1;
            }
            for (Model.Face face : m[k].getFaces()) {

                //Первая точка
                Vector3f n1 = m[k].getNormals().get(face.getNormalIndices()[0] - 1);
                glNormal3f(n1.x, n1.y, n1.z);
                if (m[k].hasTextureCoordinates() && hasText) {
                    Vector2f t1 = m[k].getTextureCoordinates().get(face.getTextureCoordinateIndices()[0] - 1);
                    glTexCoord2f(t1.x, t1.y);
                }
                Vector3f v1 = m[k].getVertices().get(face.getVertexIndices()[0] - 1);
                glVertex3f(v1.x * scale, v1.y * scale, v1.z * scale);

...2 More Vertex...

            glEnd();
            glDisable(GL_TEXTURE_2D);
            glRotatef(-rotations[i], 0, 1, 0);
            glTranslated(-copies[i].x, -copies[i].y, -copies[i].z);
        }

    }
public void绘图模型(矢量3f位置){
for(int i=0;i

外观:

如果启用了纹理,则默认情况下纹理的颜色将乘以当前颜色,因为默认情况下纹理环境模式(
GL\u texture\u ENV\u mode
)是
GL\u MODULATE
。请参阅

这会导致纹理的texel的颜色和alpha通道被设置的最后一种颜色“混合”

在渲染纹理之前,将“白色”颜色和alpha通道设置为1,以解决问题:

glColor4f(1,1,1,1);
注意,如果当前颜色的alpha通道低于1且已启用,则可能会导致意外的透明度效果

另一种解决方案是将环境模式改为
GL\u REPLACE
,而不是:

glTexEnvi(GL_纹理环境,GL_纹理环境模式,GL_替换);

我已经启用了此功能,但没有任何帮助。我还启用了
GL\u BLEND
。如果我要删除
glEnable(GL\u BLEND);
它将正常工作,但我需要使用alpha通道。显式设置
glColor3f(1,1,1)在绘制纹理网格之前。我发现git在工作。要破坏我的多边形,我只需要删除
glPushMatrix();
中的
drawModel()
。启动应用程序。放回
glPushMatrix();
,它总是透明的,我只能通过下载git来修复。