我正在与LWJGL合作制作游戏。这是非常基本的。在实现任何类型的gpu渲染或花哨的模型加载器之前,我想确保我至少可以同时渲染2D和3D;当你四处走动时,我的游戏有一个gui。或者至少,它应该是。这是我的初始化代码;当我只渲染3D时,不会发生闪烁。
public void clearGL() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
}
public void init3D() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective((float) 68, Engine.size[0] / Engine.size[1], 0.3f, 1000);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}
public void render3D(Camera c) {
init3D();
clearGL();
//Do translations here
glTranslatef(0f, -5f, 0f);
glColor3f(0, 1, 0);
glBegin(GL_QUADS);
glVertex3f(-50f, 0f, -50f);
glColor3f(0, 0, 1);
glVertex3f(50f, 0f, -50f);
glColor3f(1, 0, 0);
glVertex3f(50f, 0f, 50f);
glColor3f(0, 1, 1);
glVertex3f(-50f, 0f, 50f);
glEnd();
}
public void init2D() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, Engine.size[0], 0, Engine.size[1], -1, 1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glLoadIdentity();
}
public void render2D() {
init2D();
glBegin(GL_QUADS);
glVertex2f(0f, 50f);
glVertex2f(50f, 50f);
glVertex2f(50f, 0f);
glVertex2f(0f, 0f);
glPopMatrix();
}
我可以告诉它的渲染,因为我正在绘制一个四边形来表示JBullet中的地板。出于某种原因,它位于摄像头的上方,但是当我将摄像机向上移动时它会越来越远,这就是我将摄像机转换为-5的原因。这是另一个问题,另一天。
答案 0 :(得分:0)
如果您打算在 Z = 0 确实 会考虑禁用深度测试>(深度范围的中间)。如果不这样做,3D场景中可见空间的一半可能会阻碍2D绘图。或者,您可以使用glVertex2f (...)
替换glVertex3f (x,y, -1.0)
来电,将2D中的所有内容都放到深度范围的最前面。
但关于所有这一切的真正奇怪之处在于render2D (...)
函数的结束:你永远不会调用glEnd (...)
并弹出一个你似乎永远不会推动的矩阵。这是两个不匹配的怪异来源,其中一个可能导致你的问题。