Lwjgl和OpenGL - glTexCoord2f没有按预期工作

时间:2014-11-24 13:45:46

标签: java opengl lwjgl

我尝试使用openGL和lwjgl渲染2D动画 我使用的图像是896x128像素,由7个单帧组成,每个帧大小为128x128像素 现在我尝试使用glTexCoord2f渲染此图像以获取纹理的正确部分,如https://github.com/mattdesl/lwjgl-basics/wiki/Textures#texture-atlases所示 我的代码如下所示:

float srcX = 128*2;
    float srcY = 0;
    float srcWidth = 128;
    float srcHeight = 128;

    float u = srcX / animation.baseImage().width();
    float v = srcY / animation.baseImage().height();
    float u2 = (srcX + srcWidth) / animation.baseImage().width();
    float v2 = (srcY + srcHeight) / animation.baseImage().height();

    GL11.glTexCoord2f(u, v); // Upper Left
    GL11.glVertex2f(upperLeft.x(), upperLeft.y());

    GL11.glTexCoord2f(u2, v); // Upper Right
    GL11.glVertex2f(upperRight.x(), upperRight.y());

    GL11.glTexCoord2f(u2, v2); // Lower Right
    GL11.glVertex2f(lowerRight.x(), lowerRight.y());

    GL11.glTexCoord2f(u, v2); // Lower Left
    GL11.glVertex2f(lowerLeft.x(), lowerLeft.y());

animation.baseImage()。width和height()是完整图像的大小 " 2"在srcX = 128 * 2中实际上是当前帧。但我的结果如下: wrong animation

有人知道出了什么问题以及如何做对吗?

1 个答案:

答案 0 :(得分:-1)

我发现了问题:
OpenGL似乎将整个纹理缩放到下一个2的幂,其高度为128,与原始图像相同,但宽度为1024.如果我对animation.baseImage()执行所有计算.width() ;而对于1024,一切看起来都像预期的那样。

有没有办法避免这种情况?