我想创建自己的简单游戏UI,我想我知道主要的东西是如何完成的。问题是我不知道如何通过在3D视图中使用屏幕坐标来绘制简单的2D四边形?这甚至可能吗?也许我应该以另一种方式绘制游戏UI?
请不要推荐任何图书馆。我想了解它是如何完成的,而不是使用现有的东西。
答案 0 :(得分:2)
由于你包含了lwjgl标签,这通常是在OpenGL中通常完成的方式,这也适用于你:
设置视图,以便您可以在场景顶部渲染正交视图。它的单位范围从-1.0f,-1.0f(左侧,屏幕顶部)到1.0f,1.0f(屏幕右下方),并将绘制在已经渲染的游戏场景的顶部。< / p>
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
渲染纹理四边形,坐标从-1.0f到1.0f
glBegin(GL_QUADS);
// <== Bind your texture, material for your GUI button here
glVertex3f(-0.5, 0.5, 0);
glVertex3f(0.5, 0.5, 0);
glVertex3f(0.5, -0.5, 0);
glVertex3f(-0.5, -0.5, 0);
glEnd();
这为您提供了解决方案的独立性。因此,如果您以800x600的速度玩游戏,四边形将是一个尺寸,但如果您以1024x768播放,它将自动增长以填充屏幕的相同比例区域。
如果您真的想直接在屏幕坐标中书写,那么您可以改为设置您的glOrtho(例如,范围从0.0到800.0)。但不建议这样做。
答案 1 :(得分:1)
使用将投影设置为正交 GLU.gluOrtho2D(0f,glutScreenWidth,0f,glutScreenHeight);
这是JBullet如何设置文本绘制的投影(它们在FontRenderer中使用1作为z坐标):
// See http://www.lighthouse3d.com/opengl/glut/index.php?bmpfontortho
public void setOrthographicProjection() {
// switch to projection mode
gl.glMatrixMode(GL_PROJECTION);
// save previous matrix which contains the
// settings for the perspective projection
gl.glPushMatrix();
// reset matrix
gl.glLoadIdentity();
// set a 2D orthographic projection
gl.gluOrtho2D(0f, glutScreenWidth, 0f, glutScreenHeight);
gl.glMatrixMode(GL_MODELVIEW);
gl.glLoadIdentity();
// invert the y axis, down is positive
gl.glScalef(1f, -1f, 1f);
// mover the origin from the bottom left corner
// to the upper left corner
gl.glTranslatef(0f, -glutScreenHeight, 0f);
}
请参阅https://github.com/affogato/JBullet-QIntBio-Fork/blob/master/src/com/bulletphysics/demos/opengl/并查看FontRenderer和LwjglGL类......