0

我正在尝试在 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 部分被正确渲染,但我的纹理没有任何迹象。我记得调用该方法,所以这不是一个可能的答案;纹理也正确加载,我已经检查过了。有谁能够帮我?

4

1 回答 1

0

如果您在第一次函数调用中看到“不可能”错误,则它可能是由之前在其他地方的调用设置的——即使在库代码中也是如此。

您可以尝试通过在循环中调用 glError() 来清除错误,直到它返回成功。然后,您将有一个干净的状态来检查您调用的每个函数。这只是一个 hack,永远不要在运输代码中这样做!

但是您还必须尝试简化您的代码。只需调用 glDrawLine() 即可开始。如果可行,则绘制一个无纹理的三角形。这将确认您的观点和模型视图是正确的。只有这样才能启用纹理。

您可能有乱序呼叫。例如,您为 GL_MODELVIEW 推动什么矩阵?

于 2014-01-09T21:10:21.350 回答