1

我正在尝试在 LWJGL 中使用 OpenGL 制作形状,但每次我这样做时,都会使这个三角形凹进去。

编码:

//The Window Is 800 Wide And 600 Tall
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2i(0, 0);
GL11.glVertex2i(800, 0);
GL11.glVertex2i(0, 600);
GL11.glVertex2i(800, 600);
GL11.glEnd();

结果:

OpenGL 失败

此外,代码要大得多。我只是放了绘制形状的代码。

4

3 回答 3

5

操作顺序在 OpenGL 中确实很重要。这段代码如下:

放下一支“铅笔”(我建议你用一支真正的铅笔在一张实际的纸上做这个,一边阅读,即按照说明,放下铅笔并在不抬起铅笔的情况下做以下动作)——画一个四边形

GL11.glBegin(GL11.GL_QUADS);

第一个角左下角

GL11.glVertex2i(0, 0);

右下角第二个角

GL11.glVertex2i(800, 0);

Thid 角落左上角

GL11.glVertex2i(0, 600);

右上角第四角

GL11.glVertex2i(800, 600);

通过将铅笔返回到第一点来完成四边形。

GL11.glEnd();

OpenGL 期望您以一致的缠绕方式提供凸几何体,即顶点是按顺时针或逆时针方向绘制的。您在两者之间切换方向,这使得您定义的形状是非凸的。

我强烈建议你保持逆时针缠绕:

  1. 左下方
  2. 右下角
  3. 右上
  4. 左上方

这也是你用铅笔画四边形的方法。

于 2012-12-24T11:05:10.267 回答
4

尝试交换这两个:

 GL11.glVertex2i(0, 600);
 GL11.glVertex2i(800, 600);

所以你有这个:

GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2i(0, 0);
GL11.glVertex2i(800, 0);
GL11.glVertex2i(800, 600);
GL11.glVertex2i(0, 600);
GL11.glEnd();

因此,在您的代码中,四边形中的顶点顺序为:左上、右上、左下、右下。这不是凸形。正确的顺序是:左上、右上、右下、左下。

于 2012-12-24T10:43:42.017 回答
0

解决它。我画左上、右上、右下、左下。不是左上、右上、左下、右下。

于 2012-12-24T10:54:06.917 回答