【发布时间】:2014-01-10 05:10:21
【问题描述】:
我正在尝试在 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 部分被正确渲染,但我的纹理没有任何迹象。我记得调用该方法,所以这不是一个可能的答案;纹理也正确加载,我已经检查过了。 有谁能够帮我?
【问题讨论】:
-
您是否在每次调用 GL 代码后检查 OpenGL 错误状态? OpenGL 是否给你任何错误信息?请记住,OpenGL 是一个状态机。每次调用后都会设置错误状态。因此,如果您只检查每一次调用,错误状态将被前一次调用重置。我没有看到任何检查 OpenGL 错误状态的代码。提供很多关于正在发生的事情的信息。
-
我做到了,我得到了错误 1282,使用 gluErrorString 表示操作无效。问题是它指的是行 glMatrixMode(GL_PROJECTION),这是完全不可能的,所以我又被卡住了。
-
根据 OpenGL 文档,只有在 glBegin() 和 glEnd() 之间调用 glMatrixMode 时才会出现该错误。你是在另一个绘图函数中调用这个函数吗?
-
不,一点也不。我刚刚检查过了。
-
那么你的错误不会被 glMatrixMode 抛出。文档不会说谎。尝试在代码中的每次调用后检查错误。