以下代码生成下面的图像。我用于背景的图像是 640 x 480,显示模式也是如此。纹理背景是.bmp,并使用Slick 纹理加载器加载。我很困惑为什么它没有填充四边形以及为什么它被反射(reflect)。 编辑:我的 OpenGL 场景的背景是粉红色的,您看到的黑色来自创建的四边形。背景图片是带有 2px 浅蓝色边框的绿色 block ,上面贴有“test”。
private void renderBackground(){
float w = displayMode.getHeight()/2;
float h = displayMode.getWidth()/2;
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glPushMatrix();
GL11.glLoadIdentity();
GLU.gluOrtho2D(-w, w, -h, h);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glPushMatrix();
GL11.glLoadIdentity();
GL11.glDisable(GL11.GL_DEPTH_TEST);
if(useTextures)background.bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex2f(-w,-h);
GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex2f(w,-h);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex2f(w, h);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex2f(-w, h);
GL11.glEnd();
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glPopMatrix();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glPopMatrix();
}
现在,当我添加 GL11.glTranslatef(20.0f, 20.0f, 0.0f);
时,您会注意到出现了粉红色,这是在我的“initGL”方法中创建的颜色:
GL11.glClearColor(1.0f, 0.75f, 0.796f, 0.0f);
我的 GL_PROJECTION 在推送之前包含以下内容,当调用 renderBackground() 时,我的 GL_MODELVIEW 未修改。
GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix
GL11.glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
GLU.gluPerspective(45.0f, (float) displayMode.getWidth() / (float) displayMode.getHeight(), 0.1f, 25.0f);
//position camera
GLU.gluLookAt(5.0f, 3.0f, -5.0f, 0.0f, 0.0f, -10.0f, 0.0f, 1.0f, 0.0f);
GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select The Modelview Matrix
最佳答案
我需要更多信息来确定问题,但这里列出了一些可能性。
1) 您使用的是较旧的显卡,它不支持非 2 的幂纹理,因为您正在使用库来加载纹理,也许它正在检测它,创建 2 的幂图像,并填充黑色。
2)您(或您正在使用的某些库)更改了纹理矩阵堆栈的矩阵,并且它正在更改纹理坐标。
3)当您加载纹理(或调用库来执行此操作)时,您做错了什么。
我要检查的第一件事是您的显卡是否支持纹理非 2 的幂扩展。您可以在运行时检查它,参见how to detect if openGL/card supports non power of 2?
关于java - 使用 Ortho2D 在 OpenGL 中映射四边形纹理时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944373/