移动摄影机时,纹理的边界上会显示白线(或空格)。Java、OpenGL
纹理绘制不正确。 正如我所看到的,程序用底线来改变像素的顶行。它将左栏改为右栏。 如果纹理是空的,比如说,在顶部,但底部有黑色像素-当你向上或向下移动相机时,你会看到底线变为空,而顶线不时变为黑色。所以当你向左或向右移动时,它也会改变列。 为了避免这种情况,我尝试擦除边界上的所有像素,并将纹理彼此靠近几个像素,以某种方式将它们粘合起来。但效果有一半好。修正了一个-另一个出现了。 出于某些原因,它会在纹理之间绘制白色或接近白色的线条。我也尝试过修复这个问题,并将纹理移动得更近。到目前为止,他们是一个接一个的,但这种影响仍然是可见的 当然,我已经检查了StackOverflow,只有一个可能的问题长期没有答案。 这似乎是相似的,并有相关的根源 -常规 -带空格 下面是犯同样错误的小程序的代码:移动摄影机时,纹理的边界上会显示白线(或空格)。Java、OpenGL,java,opengl,textures,Java,Opengl,Textures,纹理绘制不正确。 正如我所看到的,程序用底线来改变像素的顶行。它将左栏改为右栏。 如果纹理是空的,比如说,在顶部,但底部有黑色像素-当你向上或向下移动相机时,你会看到底线变为空,而顶线不时变为黑色。所以当你向左或向右移动时,它也会改变列。 为了避免这种情况,我尝试擦除边界上的所有像素,并将纹理彼此靠近几个像素,以某种方式将它们粘合起来。但效果有一半好。修正了一个-另一个出现了。 出于某些原因,它会在纹理之间绘制白色或接近白色的线条。我也尝试过修复这个问题,并将纹理移动得更近。到目前为止,他们是一
public class WorkWrong
{
public static void main(String[] args)
{
//creating a Display
int wX=650,wY=650;
try
{
Display.setDisplayMode(new DisplayMode(wX, wY));
Display.setTitle("Useelees");
Display.setResizable(false);
Display.create();
}
catch(LWJGLException e)
{
e.printStackTrace();
System.exit(0);
}
//The Mystery of OpenGL... This code is not mine, and I've never
//changed anything here. I just don't know what is changable.
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glEnable(GL11.GL_BLEND); //Enables Blending
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glViewport(0, 0, wX, wY);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, wX, wY, 0, -1, 1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glRenderMode(0);
//reading textures
Texture[] texture = new Texture[5];
texture[0]=PNGUP("0.png");
texture[1]=PNGUP("1.png");
texture[2]=PNGUP("2.png");
texture[3]=PNGUP("3.png");
while(true)
{
//Drawing a square of 4 pictures.
SquareRender(texture[0],0,0,64,64);
SquareRender(texture[1],0,64,64,128);
SquareRender(texture[2],64,0,128,64);
SquareRender(texture[3],64,64,128,128);
if(Display.isCloseRequested())
{
AL.destroy();
Display.destroy();
System.exit(1);
}
Display.update();
Display.sync(30);
}
}
现在方法:
private static Texture PNGUP(String n)
{
try
{
TmpTex= TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream(n));
}
catch(IOException e)
{
e.printStackTrace();
}
return TmpTex;
}
static Texture TmpTex;
及
你能添加一些渲染代码来帮助我们更好地理解你在做什么吗?是的!当然可以。让我拿第二个,我会做一个小代码。你使用什么纹理过滤器,什么包裹模式?你可能想用GL_-CLAMP_-TO_-EDGE来防止边界处的缠绕。对不起,我不理解所有这些,因为我对OpenGL有点不了解。我不知道在哪里使用这个GL_夹具,我对包装一无所知。幸运的是,我找到了一个方法,几个小时后我会把它贴在这里。但是,那样做是愚蠢的。如果你能告诉我在哪里使用你建议的东西。。。这将是很好的。因为我在这个网站上被阻止了一个真正糟糕的答案,所以,在我离开之前。如果有人有类似的问题,我对相关问题的糟糕回答可能会对你有所帮助。试一试:
public static void SquareRender(Texture T,float x1,float y1,float x2,float y2)
{
T.bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0, 0);
GL11.glVertex2f(x1,y1);
GL11.glTexCoord2f(1, 0);
GL11.glVertex2f(x2,y1);
GL11.glTexCoord2f(1, 1);
GL11.glVertex2f(x2,y2);
GL11.glTexCoord2f(0, 1);
GL11.glVertex2f(x1,y2);
GL11.glEnd();
}