我正在使用Slick在我的3D游戏中将文字写为HUD。我设法弄清楚如何显示文本,但有一个问题。文本显示在远离相机的某个深度某处,因此靠近相机的3D物体会覆盖它。我试图弄清楚为什么文本没有写在屏幕空间。我猜测它是在深度为0的视图空间中,当从前到后绘制时,导致深度较低的物体覆盖它。但是,我不确定,我仍然不知道如何解决它。我已经尝试搞乱我的矩阵调用,但我总是得到相同的结果(或根本没有文本)。以下是我在每个循环中渲染所有内容的方法:
private void initProjection()
{
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ZERO);
}
public void to2D()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 640, 480, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
}
public void to3D()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fov, aspect, near, far);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
}
public void setView()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
to2D();
font.drawString(320, 240, "Hello", Color.green);
to3D();
//3D stuff
}