我一直在做一个非常简单的游戏,我决定加入一些基本的纹理。我正在试验代码,出于某种原因,我不知道为什么,我无法正确映射纹理。现在,我只是想将一个绿色矩形(512 x 64 .png 文件)映射到大小为 640 x 480 的屏幕底部。这个绿色矩形应该代表地面。这是我尝试失败的图像:
以下是相关代码:
在我创建的 Boot 类中,我调用了这个函数:
public void initGL() {
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, gameWidth, gameHeight, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_TEXTURE_2D);
}
在我创建的地面类中,我调用了一个绘图函数。纹理在 Boot 类中加载,并设置为我在 ground.draw() 函数中绑定和使用的受保护变量。
public void draw() {
this.texture.bind();
GL11.glLoadIdentity();
GL11.glTranslatef(0, 0, 0);
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0, 0);
GL11.glVertex2f(0, 480 - height);
GL11.glTexCoord2f(1, 0);
GL11.glVertex2f(640, 480 - height);
GL11.glTexCoord2f(1, 1);
GL11.glVertex2f(640, 480);
GL11.glTexCoord2f(0, 1);
GL11.glVertex2f(0, 480);
GL11.glEnd();
}
另外,如果你注意到上面我有一个 GL11.glTranslatef 调用。如果我只是让这个函数的第二个参数足够大以使其在 y 方向上进一步移动,我可以让我的地面纹理处于正确的位置,但是我不希望这样做。我真的不知道纹理最初是如何出现在这个位置的,我想弄清楚为什么。