lwjgl opengl在纹理上留下黑色轮廓

时间:2017-03-23 21:34:46

标签: java eclipse opengl lwjgl

我的问题是java中的opengl,我用lwjgl。我正在尝试从.png文件加载纹理,然后将它们绘制到屏幕上。我面临的问题是,当使用glTexCoord2f选择纹理坐标时,在某些情况下它们会脱离纹理。这通过将大的黑色区域留在绘制的纹理的边缘上来表现其自身。我在网上找到的唯一解决方案是将GL_CLAMP_TO_EDGE添加到GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T参数中。下面是与黑色寄宿生的绿色背景纹理的图片。然后我有与我使用opengl相关的代码。最后,如果重要的是我在Linux上使用Eclipse。感谢您提供任何富有成效的答案。

实施例 textures on green background 代码:初始化opengl

glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, width, hight, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

代码:绘制纹理

glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    background.bind();
    glBegin(GL_QUADS);  //Draw Background
        glTexCoord2f(0, 0);
        glVertex2i(25, 25);//Upper Left
        glTexCoord2f(1, 0);
        glVertex2i(900, 25);//Upper Right
        glTexCoord2f(1, 1f);
        glVertex2i(900, 600);//Lower Right
        glTexCoord2f(0, 1f);
        glVertex2i(25, 600);//Lower Left
    glEnd();


    statusBarWraper.bind();
    glBegin(GL_QUADS);  //Drawing the wrapper
        glTexCoord2f(0, 0);
        glVertex2i(500, 650);//Upper Left
        glTexCoord2f(1, 0);
        glVertex2i(1000, 650);//Upper Right
        glTexCoord2f(1, 1);
        glVertex2i(1000, 700);//Lower Right
        glTexCoord2f(0, 1);
        glVertex2i(500, 700);//Lower Left
    glEnd();

    statusBar.bind();
    glBegin(GL_QUADS); //Drawing progress Bar
        glTexCoord2f(0, 0);
        glVertex2i(100, 650);//Upper Left
        glTexCoord2f(1, 0);
        glVertex2i(400, 650);//Upper Right
        glTexCoord2f(1, 1);
        glVertex2i(400, 675);//Lower Right
        glTexCoord2f(0, 1);
        glVertex2i(100, 675);//Lower Left
    glEnd();

0 个答案:

没有答案