纹理未填充整个四边形



我已经按照流畅教程的字母配置了大部分内容,但我得到的是左下角的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);

最新更新