以下代码生成后面的图像。我用于背景的图像是640 x 480,displayMode也是如此。纹理背景是一个.bmp,并加载了Slick纹理加载器。我很困惑为什么它没有填充Quad以及为什么它被反映出来。 编辑:我的OpenGL场景的背景是粉红色,你看到的黑色来自Quad创建。背景图像是绿色块,带有2px浅蓝色边框,上面贴有“测试”。
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在推送之前包含以下内容,我的GL_MODELVIEW在调用renderBackground()时未被修改。
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
答案 0 :(得分:3)
我需要更多信息来确定问题,但这里列出了一些可能性。
1)您正在使用较旧的视频卡,它不支持纹理非2的功率,因为您正在使用库来加载纹理,可能是它正在检测它,创建两个图像的强大功能,并填充它与黑色。
2)你(或你正在使用的某个库)改变了纹理矩阵堆栈的矩阵,它正在改变纹理坐标。
3)加载纹理时你做错了(或者调用库这样做)。
我要检查的第一件事是你的视频卡是否支持2扩展的纹理非幂。您可以在运行时查看它,请参阅how to detect if openGL/card supports non power of 2?
答案 1 :(得分:0)
我首先看到的是你计算
float w = displayMode.getHeight()/2;
float h = displayMode.getWidth()/2;
切换?
其次,纹理可以翻转,因为加载器翻转了它(当我记得这件事发生在我身上时,尤其是BMP)。