我已经按照流畅教程的字母配置了大部分内容,但我得到的是左下角的png只填充了四边形的3/4,四边形的尺寸是100x100,纹理是完全填充的,但由于某种原因,我无法进行包装(救命!!如果这是我的错误)
注册代码:
public Form(String fileName, Frame frame) {
try {
texture = TextureLoader.getTexture(
"PNG",
ResourceLoader.getResourceAsStream("img/" + fileName
+ ".png"));
} catch (IOException e) {
e.printStackTrace();
}
this.frame = frame;
VectorFrame = a.constructVectorFrame(frame);
}
渲染代码:
GL11.glEnable(GL11.GL_TEXTURE_2D);
Color.white.bind();
texture.bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0, 0);
GL11.glVertex2d(point.x, point.y);
GL11.glTexCoord2f(0, 1);
GL11.glVertex2d(point.x, point.y + frame.maxY);
GL11.glTexCoord2f(1, 1);
GL11.glVertex2d(point.x + frame.maxX, point.y + frame.maxY);
GL11.glTexCoord2f(1, 0);
GL11.glVertex2d(point.x + frame.maxX, point.y);
GL11.glEnd();
GL11.glDisable(GL11.GL_TEXTURE_2D);
a.renderVectorFrame(point, VectorFrame);
Slick强制您使用两种纹理的力量。你有两种方法来处理这个问题:
- 使用两种纹理的力量(例如,128x128)
- 将glTexCoord2f()中的1.0fs更改为width/(最接近的2次方)和height/(最靠近的2次幂)
另外,看看这个SO问题:纹理没有';伸展不好。为什么会发生这种情况?
这里有一个简单的方法。在设置TextureCoordinates时使用texture.getWidth()/getHeight()。完全适合我
GL11.glEnable(GL11.GL_TEXTURE_2D);
Color.white.bind();
texture.bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0, 0);
GL11.glVertex2d(point.x, point.y);
GL11.glTexCoord2f(0, texture.getHeight()); // <---
GL11.glVertex2d(point.x, point.y + frame.maxY);
GL11.glTexCoord2f(texture.getWidth(), texture.getHeight()); // <---
GL11.glVertex2d(point.x + frame.maxX, point.y + frame.maxY);
GL11.glTexCoord2f(texture.getWidth(), 0); // <---
GL11.glVertex2d(point.x + frame.maxX, point.y);
GL11.glEnd();
GL11.glDisable(GL11.GL_TEXTURE_2D);
a.renderVectorFrame(point, VectorFrame);