我正在尝试在OpenGL游戏中绘制HUD;我决定使用一些纹理并将它们应用于2D场景。我正在使用Java和LWJGL。 这是代码:
public void drawHUD1()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 800, 0, 600, -1, 1);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glPushMatrix();
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, arrows[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f,0.0f);
glVertex2f(60f,60f);
glTexCoord2f(1.0f,0.0f);
glVertex2f(90f,60f);
glTexCoord2f(1.0f,1.0f);
glVertex2f(90f,90f);
glTexCoord2f(0.0f,1.0f);
glVertex2f(60f,90f);
glEnd();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float aspect = (float) width / height;
GLU.gluPerspective(45.0f, aspect, 0.1f, 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
}
当我运行它时,3D部件被正确渲染,但没有纹理的迹象。我记得打电话给这个方法,所以这不是一个可能的答案;纹理也正确加载,我已经检查过了。 有谁能够帮我?
答案 0 :(得分:0)
如果在第一个函数调用中看到“不可能”的错误,它可能是由其他地方的先前调用设置的 - 即使在库代码中也是如此。
您可以尝试通过在循环中调用glError()来清除错误,直到它返回成功为止。 然后,您将有一个干净的平板,用于检查您调用的每个功能。这只是一个黑客,不要在运输代码中这样做!
但您还必须尝试简化代码。只需调用glDrawLine()即可启动。如果可行,则绘制一个无纹理的三角形。这将证实您的观点和模型是正确的。只有这样才能启用纹理。
您可能有无序通话。例如。你在推动GL_MODELVIEW什么矩阵?