Java 我如何阅读LWJGL中的精灵表?
我目前使用LWJGL纹理在屏幕上绘制图像。我想从精灵表中读取纹理*。我正在使用slick的TextureLoader类加载纹理 我画了一个LWJGL形状并在上面绑定了一个纹理 e、 g: 让我画一个图像:Java 我如何阅读LWJGL中的精灵表?,java,textures,lwjgl,sprite-sheet,Java,Textures,Lwjgl,Sprite Sheet,我目前使用LWJGL纹理在屏幕上绘制图像。我想从精灵表中读取纹理*。我正在使用slick的TextureLoader类加载纹理 我画了一个LWJGL形状并在上面绑定了一个纹理 e、 g: 让我画一个图像: Texture texture = ResourceManager.loadTexture("Images/Tests/test.png"); GL11.glBegin(GL11.GL_QUADS); { GL11.glTexCoord2f(0, 0);
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();
我认为有一种方法,当调用glTexCoord2f时,我可以给它一个精灵偏移量,然后将精灵表加载到纹理中
例如,一个调用如下所示:
GL11.glTexCoord2f(0+spriteXOffset, texture.getHeight()-spriteYOffset);
但我真的很想知道是否有一种更简单的方法,比如从单个纹理中提取纹理,就像在这里所做的那样:
只是用纹理对象代替BuffereImage
谢谢你的帮助 glick纹理加载程序内部使用的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
然而,还有一种更简单的方法。看看我创建的它,看看如何使用像素坐标来代替标准化的纹理。Slick Texture loader内部使用的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
然而,还有一种更简单的方法。看看我创建的,看看你如何使用像素坐标来代替标准化的纹理。谢谢你的回答!我已经看了你的视频,除了LWJGL和slick util,我不想再添加任何jar,我发现我的方法更简单,但我照你说的做了,图片没有显示这是我的渲染代码:GL11.glTexCoord2fspriteX/width,spriteY/height;GL11.glVertex2f0,0;GL11.glTexCoord2fspriteX/宽度,spriteY+细胞大小/高度;GL11.glVertex2f0,32;GL11.glTexCoord2fspriteX+细胞大小/宽度,spriteY+细胞大小/高度;GL11.glVertex2f32,32;GL11.glTexCoord2fspriteX+单元格大小/宽度,spriteY/宽度;GL11.glVertex2f32,0;精灵x是32精灵y是0宽度是96,高度是128,Im绑定的纹理是纸张,没有显示任何内容。。。单元格大小为32我注意到在一次纹理调用中,我将y除以宽度,进行了更改,但仍然没有显示。请尝试将纹理坐标存储在四个浮点数中,并将其打印到控制台。谢谢您的回答!我已经看了你的视频,除了LWJGL和slick util,我不想再添加任何jar,我发现我的方法更简单,但我照你说的做了,图片没有显示这是我的渲染代码:GL11.glTexCoord2fspriteX/width,spriteY/height;GL11.glVertex2f0,0;GL11.glTexCoord2fspriteX/宽度,spriteY+细胞大小/高度;GL11.glVertex2f0,32;GL11.glTexCoord2fspriteX+细胞大小/宽度,spriteY+细胞大小/高度;GL11.glVertex2f32,32;GL11.glTexCoord2fspriteX+单元格大小/宽度,spriteY/宽度;GL11.glVertex2f32,0;精灵x是32精灵y是0宽度是96,高度是128,Im绑定的纹理是纸张,没有显示任何内容。。。在一次纹理调用中,我注意到单元格大小是32。我将y除以宽度,对其进行了更改,但仍然没有显示。尝试将纹理坐标存储在四个浮点数中,并将它们打印到控制台。