我将 LWJGL 用于它的 OpenGL 绑定,并且我正在尝试绘制一个带有纹理的四边形。我已经成功地做到了,但是有一个奇怪的副作用,我不确定它为什么会出现。
以下代码在第一次加载纹理时执行(在第一次渲染之前)。textureID
当我绑定纹理/绘制四边形时,我保存了 for 的值。以下设置代码取自此处找到的 SO 答案。
int textureID = GL11.glGenTextures(); // Generate texture ID
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID); // Bind texture ID
// Setup wrap mode
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP);
// Setup texture scaling filtering
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
// Send texel data to OpenGL
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, image.getWidth(), image.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer);
在渲染循环中,我使用以下代码绘制四边形:
int texture = TextureLoader.loadTexture(TextureLoader.loadImage("/pc_run/run3.png"));
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
GL11.glBegin(GL11.GL_QUADS);
{
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex2f(-hw, -hh);
GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex2f(+hw, -hh);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex2f(+hw, +hh);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex2f(-hw, +hh);
}
GL11.glEnd();
到目前为止,这是可行的(并且也包含在glPushMatrix()
/glPopMatrix()
调用之间)。但是,到目前为止,我绘制到 GLContext 的任何内容都不会显示。删除初始化代码中的调用 GL11.glTexImage2D
,精灵不显示,但其他所有内容(非纹理)都正确显示。