纹理不能正确拉伸.为什么会这样?

Jul*_*per 4 java opengl graphics textures lwjgl

我正在使用LWJGL和Slick框架将Textures加载到我的OpenGL应用程序中.

我正在使用这个图片: 日本国旗,用于纹理

这个代码导入并利用纹理:

    flagTexture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("japan.png"));
Run Code Online (Sandbox Code Playgroud)

......

    flagTexture.bind();

    GL11.glColor3f(1.0f, 1.0f, 1.0f);
    GL11.glPushMatrix();

    GL11.glTranslatef(0.0f, 0.0f, -10.0f);

    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0.0f, 0.0f);
    GL11.glVertex2f(0.0f, 0.0f);
    GL11.glTexCoord2f(1.0f, 0.0f);
    GL11.glVertex2f(2.5f, 0.0f);
    GL11.glTexCoord2f(1.0f, 1.0f);
    GL11.glVertex2f(2.5f, 2.5f);
    GL11.glTexCoord2f(0.0f, 1.0f);
    GL11.glVertex2f(0.0f, 2.5f);
    GL11.glEnd();

    GL11.glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

但最终结果变成了这样: 纹理不会拉伸到顶点参数

我没有使用任何特殊设置,如GL_REPEAT或类似的东西.这是怎么回事?如何使纹理填充给定的顶点?

Rob*_*ani 9

看起来纹理被填充到最接近的2的幂.这里有两种解决方案:

  1. 将纹理拉伸至最接近的2的幂.
  2. 计算纹理大小与最近的2的幂之间的差异,并将纹理坐标更改1.0ftextureWidth/nearestPowerOfTwoWidthtextureHeight/nearestPowerOfTwoHeight.

可能还有一些特定的LWJGL方法允许非二次幂纹理,请看一下.