0

我对 LWJGL 还是很陌生,我一直在搞乱一些教程,并按照它们来学习库,这样我最终就可以开始制作游戏了。我的 glVertex2d() 代码有问题,因为无论我在括号中输入什么值,它总是会在程序上显示一个相同大小的框。

世界大小是 640x480,我不知道问题可能是什么

公共静态无效drawBackground(){

  // Sky
  glBegin(GL_QUADS);

  glColor3d(0.7,0.8,0.9);
  glVertex2d(0, 0);
  glVertex2d(640,0);

  glColor3d(0.5,0.6,0.8);
  glVertex2d(640, 480);
  glVertex2d(0, 480);



  // ground

  glBegin(GL_QUADS);

  glColor3d(0.5,0,0);
  glVertex2d(0,0);
  glVertex2d(640, 0);

  glVertex2d(640,32);
  glVertex2d(0, 32);

  glEnd();

}

如果需要,将发布完整的代码。

4

2 回答 2

0

马上我可以看到你没有关闭天空的绘制,当你去绘制地板时这可能会让 OpenGL 感到困惑。同样,由于您要绘制两个单独的对象,您需要通过在绘制之前为其推入一个新的变换矩阵来将它们定义为单独的,然后在完成时取出矩阵(除非您希望地板成为天空的父母..)。

public static void drawBackground() {
   // Sky
   glpushMatrix();
   glBegin(GL_QUADS);
    glColor3f(0.7f,0.8f,0.9f);
    glVertex2f(0, 0);
    glVertex2f(640,0);
    glColor3f(0.5f,0.6f,0.8f);
    glVertex2f(640, 480);
    glVertex2f(0, 480);
   glEnd();
   glpopMatrix();

   // ground
   glpushMatrix();
   glBegin(GL_QUADS);
    glColor3f(0.5f,0,0);
    glVertex2f(0,0);
    glVertex2f(640, 0);
    glVertex2f(640,32);
    glVertex2f(0, 32);
   glEnd();
   glpopMatrix();
}

抱歉,我无法测试此代码,因为我没有准备好空白的 LWJGL 上下文。
我还将 glVertext2d 更改为 2f 因为您不需要双点精度,并在浮点数的末尾附加了一个“f”,这是一种告诉 Java 硬编码数字是浮点数的方式 - Java 假定为整数默认情况下(所以会四舍五入)。

于 2013-10-29T16:20:42.717 回答
0

这可能不是您问题的确切答案,但是...
这是immediate mode渲染(如果您看到方法调用,很容易在代码中发现glBegin(...))。关于它,有两件事你应该知道:它已被弃用,而且效率低下。不要使用它。相反,我会推荐http://www.arcsynthesis.org/gltut/或任何其他关于 OpenGL 的不太老的教程。

于 2013-10-29T16:34:05.007 回答