正如箭头所指出的那样,我的纹理旁边有一些奇怪的边缘。
这是我的OpenGL设置:
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WINDOW_WIDTH, 0, WINDOW_HEIGHT, 1, -1);
glMatrixMode(GL_MODELVIEW);
以下是我的渲染代码:
glPushMatrix();
Color.white.bind();
texture.bind();
glTranslatef(position.x+size.width/2, position.y+size.height/2, 0f);
glRotatef(rotation, 0f, 0f, 1f);
glTranslatef(-size.width/2, -size.height/2, 0f);
glBegin(GL_QUADS);
glTexCoord2f(0, 1);
glVertex2f(0, 0);
glTexCoord2f(1, 1);
glVertex2f(size.width-1, 0);
glTexCoord2f(1, 0);
glVertex2f(size.width-1, size.height-1);
glTexCoord2f(0, 0);
glVertex2f(0, size.height-1);
glEnd();
glPopMatrix();
我看到OpenGL默认的模式是在物体比纹理大时重复纹理,但在我的情况下并不是这样。
编辑:
加载纹理的代码(我使用一个库来处理它(slick-util)):
texture = TextureLoader.getTexture(textureLocation.substring(0, textureLocation.lastIndexOf('.')), ResourceLoader.getResourceAsStream(textureLocation));
我需要在OpenGL设置完成后立即添加纹理参数,这样做正确吗?
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WINDOW_WIDTH, 0, WINDOW_HEIGHT, 1, -1);
glMatrixMode(GL_MODELVIEW);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP);
我试过了,但它也不起作用。 - user1734282