【发布时间】:2013-03-13 09:15:25
【问题描述】:
我一直在制作一个非常简单的游戏,我决定加入一些基本纹理。我正在试验代码,出于某种原因,我不知道为什么,我无法正确映射纹理。现在,我只是想将一个绿色矩形(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 方向上进一步移动,我可以让我的地面纹理处于正确的位置,但是我不希望这样做。我真的不知道纹理最初是如何出现在这个位置的,我想弄清楚为什么。
【问题讨论】:
-
那么问题是什么?绿色四边形的大小不是您为四边形顶点指定的吗?
-
问题是我在上面显示的第二个代码块中的顶点应该(我认为)映射到窗口最底部的一个区域。左上角的点是 0,(480 - 高度),其中高度是纹理的高度。接下来是 640、480 - 高度,所以这当然应该是右上角。接下来显示的两个顶点显然是窗口的左下角和右下角。
标签: java opengl graphics lwjgl