Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何阅读LWJGL中的精灵表?_Java_Textures_Lwjgl_Sprite Sheet - Fatal编程技术网

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

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);

我目前使用LWJGL纹理在屏幕上绘制图像。我想从精灵表中读取纹理*。我正在使用slick的TextureLoader类加载纹理

我画了一个LWJGL形状并在上面绑定了一个纹理

e、 g:

让我画一个图像:

    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除以宽度,对其进行了更改,但仍然没有显示。尝试将纹理坐标存储在四个浮点数中,并将它们打印到控制台。