我尝试使用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中实际上是当前帧。但我的结果如下:
有人知道出了什么问题以及如何做对吗?
答案 0 :(得分:-1)
我发现了问题:
OpenGL似乎将整个纹理缩放到下一个2的幂,其高度为128,与原始图像相同,但宽度为1024.如果我对animation.baseImage()执行所有计算.width() ;而对于1024,一切看起来都像预期的那样。
有没有办法避免这种情况?