1

我将这些模式用于 OPENGL

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 640, 480, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);

我正在使用这段代码来绘制纹理

    texture.bind();

    glBegin(GL_QUADS);
    glTexCoord2f(0, 0);
    glVertex2f(x, y);// Upper Left

    glTexCoord2f(1, 0);
    glVertex2f(x + width, y); // Upper right

    glTexCoord2f(1, 1);
    glVertex2f(x + width, y + heigth); // Lower right

    glTexCoord2f(0, 1);
    glVertex2f(x, y + heigth); // Lower left
    glEnd();

它本身的纹理来自 Minecraft,是 16x16 纹理。但是当我将它缩放到 160x160 时,我得到的结果是:

在此处输入图像描述

4

1 回答 1

5

您需要指定GL_TEXTURE_MIN_FILTER& GL_TEXTURE_MAG_FILTER

如果您想保持像素看起来像纹理,您可以执行以下操作。

texture.bind(); // First you bind your texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

如果您希望它们恢复“模糊”,您将执行以下操作。

texture.bind(); // First you bind your texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

请记住,对于多个纹理,您需要单独调用它们,就像这样。

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

texture2.bind();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
于 2013-08-18T11:48:21.793 回答