2

我想使用 Slick 的 Texture 类将两个不同的纹理绑定到一个立方体。问题是我绑定到立方体的第一个纹理显示正确,即像素级,但我绑定到立方体侧面的另一个纹理模糊,好像我没有输入

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

这是渲染立方体的代码

    public void render(){
    float x = coordinate.x;
    float y = coordinate.y;
    float z = coordinate.z;

    top.bind();
    glBegin(GL_QUADS);

        //TOP
        glNormal3f(0f, 1f, 0f);
        glTexCoord2f(0f, 0f);
        glVertex3f(x,y,z);
        glTexCoord2f(0f, 1f);
        glVertex3f(x, y, z+1);
        glTexCoord2f(1f, 1f);
        glVertex3f(x+1, y, z+1);
        glTexCoord2f(1f, 0f);
        glVertex3f(x+1, y, z);
    glEnd();

    bottom.bind();
    glBegin(GL_QUADS);
        //BOTTOM
        glNormal3f(0f, -1f, 0f);
        glTexCoord2f(0f, 0f);
        glVertex3f(x,y-1,z);
        glTexCoord2f(0f, 1f);
        glVertex3f(x, y-1, z+1);
        glTexCoord2f(1f, 1f);
        glVertex3f(x+1, y-1, z+1);
        glTexCoord2f(1f, 0f);
        glVertex3f(x+1, y-1, z);
    glEnd();

    sides.bind();
    glBegin(GL_QUADS);
        //BACK
        glNormal3f(0,0,-1);
        glTexCoord2f(0f, 0f);
        glVertex3f(x,y,z);
        glTexCoord2f(1f, 0f);
        glVertex3f(x+1, y, z);
        glTexCoord2f(1f, 1f);
        glVertex3f(x+1, y-1, z);
        glTexCoord2f(0f, 1f);
        glVertex3f(x, y-1, z);

        //FRONT
        glNormal3f(0,0,1);
        glTexCoord2f(0f, 0f);
        glVertex3f(x,y,z+1);
        glTexCoord2f(1f, 0f);
        glVertex3f(x+1, y, z+1);
        glTexCoord2f(1f, 1f);
        glVertex3f(x+1, y-1, z+1);
        glTexCoord2f(0f, 1f);
        glVertex3f(x, y-1, z+1);

        //LEFT
        glNormal3f(-1,0,0);
        glTexCoord2f(0f, 0f);
        glVertex3f(x,y,z);
        glTexCoord2f(0f, 1f);
        glVertex3f(x, y-1, z);
        glTexCoord2f(1f, 1f);
        glVertex3f(x, y-1, z+1);
        glTexCoord2f(1f, 0f);
        glVertex3f(x, y, z+1);

        //RIGHT
        glNormal3f(1,0,0);
        glTexCoord2f(0f, 0f);
        glVertex3f(x+1,y,z);
        glTexCoord2f(0f, 1f);
        glVertex3f(x+1, y-1, z);
        glTexCoord2f(1f, 1f);
        glVertex3f(x+1, y-1, z+1);
        glTexCoord2f(1f, 0f);
        glVertex3f(x+1, y, z+1);
    glEnd();

}
4

1 回答 1

2

如果您希望两个纹理都像您所说的那样“模糊”,则需要单独绑定每个纹理,并调用以下函数。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

如果您将它们像素化/“不模糊”,则可以改为调用以下函数。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

请记住,您需要像这样单独调用它们。

texture1.bind();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

texture2.bind();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
于 2013-08-08T10:29:41.007 回答