我如何阅读LWJGL中的精灵表?

Gop*_*gop 1 java textures lwjgl sprite-sheet

我目前使用LWJGL Textures在屏幕上绘制图像.我想从精灵表中读取Textures*.我使用光滑的TextureLoader类来加载纹理.

我绘制一个LWJGL形状并将纹理绑定到它上面.

例如:

我画一个图像:

    Texture texture = ResourceManager.loadTexture("Images/Tests/test.png");

    GL11.glBegin(GL11.GL_QUADS);
    {
      GL11.glTexCoord2f(0, 0);
      GL11.glVertex2f(0, 0);
      GL11.glTexCoord2f(0, texture.getHeight());
      GL11.glVertex2f(0, height);
      GL11.glTexCoord2f(texture.getWidth(), texture.getHeight());
      GL11.glVertex2f(width,height);
      GL11.glTexCoord2f(texture.getWidth(), 0);
      GL11.glVertex2f(width,0);
    }
    GL11.glEnd();
Run Code Online (Sandbox Code Playgroud)

我认为有一种方法在调用glTexCoord2f时,我可以给它一个精灵偏移并在纹理中加载精灵表,

例如,一个调用将是这样的:

      GL11.glTexCoord2f(0+spriteXOffset, texture.getHeight()-spriteYOffset);
Run Code Online (Sandbox Code Playgroud)

但我真的想知道是否有更简单的方法,可能从单个纹理中提取纹理,例如像在这里一样:

从精灵表Java中读取图像

只是代替BufferedImage,Texture对象.

感谢您的帮助!

Osk*_*kar 6

由Slick纹理加载器内部使用的GL_TEXTURE_2D的纹理坐标需要标准化纹理坐标.也就是说,坐标范围从0.0到1.0.所以(0,0)是纹理的左上角,(1,1)是右下角.假设您的精灵坐标位于手边的像素坐标中,则必须将x坐标除以纹理宽度,将y坐标除以纹理高度,从而得到标准化的纹理坐标.然后,您将使用glTexCoord将这些坐标提供给OpenGL.

glTexCoord2f(spriteX / textureWidth, spriteY / textureHeight);
glVertex2f(coordinateX, coordinateY);
glTexCoord2f(spriteX+spriteWidth / textureWidth, spriteY / textureHeight);
glVertex2f(coordinateX2, coordinateY);
// Et cetera
Run Code Online (Sandbox Code Playgroud)

但是,还有一种更简单的方法.看一下这个视频(我创建它),看看如何使用纹理的像素坐标而不是标准化的像素坐标.