我使用LWJGL和油滑框架加载纹理到我的OpenGL应用程序。
我使用这个图片: ![](https://www.manongdao.com/static/images/pcload.jpg)
而这个代码导入和利用质地:
flagTexture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("japan.png"));
......
flagTexture.bind();
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glPushMatrix();
GL11.glTranslatef(0.0f, 0.0f, -10.0f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex2f(0.0f, 0.0f);
GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex2f(2.5f, 0.0f);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex2f(2.5f, 2.5f);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex2f(0.0f, 2.5f);
GL11.glEnd();
GL11.glPopMatrix();
但最终结果变成这样: ![](https://www.manongdao.com/static/images/pcload.jpg)
我没有使用像GL_REPEAT或类似的东西任何特殊设置。 这是怎么回事? 我怎样才能使纹理填充率给定的顶点?
它看起来像纹理填充越来越出两个最近的电源。 这里有两个解决方案:
- 舒展质感出两个最近的电源。
- 计算你的纹理的大小和最近的2的幂之间的差异,改变纹理坐标从
1.0f
到textureWidth/nearestPowerOfTwoWidth
和textureHeight/nearestPowerOfTwoHeight
。
也可能有一些具体的方法LWJGL允许非幂的两个纹理,看个明白。
如果你需要支持非幂的两个纹理,你可以修改加载方法。 如果你使用Slick2D,有没有办法做到这一点除了实现“自己的”结构类(你可以在这里与一些例子: Texture.java和TextureLoader.java的TextureLoader类包含的方法“get2Fold”,这是用于计算两个比纹理宽度/高度更大的下一个功率所以,如果你想使用非功率的两大小纹理,只是改变该方法简单地折叠返回;(=输入),所以该节目“认为”这两个下一功率是图像,它是不是在很多情况下的大小,但如果硬件支持它(大多数做),这不应该是一个问题。“更抽象”的方式是改变这一行:GL11.glTexImage2D(目标,0,dstPixelFormat,get2Fold(bufferedImage.getWidth()),get2Fold(bufferedImage.getHeight()),0,srcPixelFormat,GL11.GL_UNSIGNED_BYTE,textureBuffer);这里中,第四个参数=质地和第5 =纹理的高度的宽度。如果这些设置对图像的宽度/高度,它会工作。仙 CE这种方法基本上是一样的人之前,有两个同样的问题..正如之前所说,这会减慢你的图像处理,它可能不支持..
希望这个链接将有一定的帮助
http://www.lwjgl.org/wiki/index.php?title=Slick-Util_Library_-_Part_1_-_Loading_Images_for_LWJGL
看起来它非常相似,你在这里做什么。
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0,0);
GL11.glVertex2f(100,100);
GL11.glTexCoord2f(1,0);
GL11.glVertex2f(100+texture.getTextureWidth(),100);
GL11.glTexCoord2f(1,1);
GL11.glVertex2f(100+texture.getTextureWidth(),100+texture.getTextureHeight());
GL11.glTexCoord2f(0,1);
GL11.glVertex2f(100,100+texture.getTextureHeight());
GL11.glEnd();
文章来源: Texture doesn't stretch properly. Why is this happening?