没有使用库的游戏UI

时间:2012-05-17 20:35:00

标签: java lwjgl

我想创建自己的简单游戏UI,我想我知道主要的东西是如何完成的。问题是我不知道如何通过在3D视图中使用屏幕坐标来绘制简单的2D四边形?这甚至可能吗?也许我应该以另一种方式绘制游戏UI?

请不要推荐任何图书馆。我想了解它是如何完成的,而不是使用现有的东西。

2 个答案:

答案 0 :(得分:2)

由于你包含了lwjgl标签,这通常是在OpenGL中通常完成的方式,这也适用于你:

  1. 照常渲染基础游戏场景
  2. 设置视图,以便您可以在场景顶部渲染正交视图。它的单位范围从-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);
    
  3. 渲染纹理四边形,坐标从-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();
    
  4. 这为您提供了解决方案的独立性。因此,如果您以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类......