关于java:OpenGL 2D形状问题

OpenGL 2D Shape Issue

我试图在LWJGL中使用OpenGL制作形状,但每次执行此操作时,都会使其中的三角形凹入。

代码:

1
2
3
4
5
6
7
//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();

结果:

The OpenGL Fail

而且,代码要大得多。 我只是放置了绘制形状的代码。


操作顺序在OpenGL中很重要。该代码如下:

放下"铅笔"(我建议您在读纸时,用一支真正的铅笔在实际的纸上进行操作,即,按照说明进行操作,放下铅笔并进行以下动作而不抬起它)–画一个四边形

1
GL11.glBegin(GL11.GL_QUADS);

第一角左下角

1
GL11.glVertex2i(0, 0);

第二个角落右下角

1
GL11.glVertex2i(800, 0);

锡迪角左上

1
GL11.glVertex2i(0, 600);

右上角第四个角

1
GL11.glVertex2i(800, 600);

用铅笔返回到第一点完成四边形。

1
GL11.glEnd();

OpenGL希望您以一致的缠绕方式为其提供凸几何形状,即以顺时针或逆时针方向绘制顶点。您将在它们之间切换方向,这将使您定义的形状不凸。

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

  • 左下方
  • 右下
  • 右上
  • 左上方
  • 这也是用铅笔绘制四边形的方式。


    尝试交换这两个:

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

    所以你有这个:

    1
    2
    3
    4
    5
    6
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glVertex2i(0, 0);
    GL11.glVertex2i(800, 0);
    GL11.glVertex2i(800, 600);
    GL11.glVertex2i(0, 600);
    GL11.glEnd();

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


    固定它。我画左上,右上,右下,左下。不是左上,右上,左下,右下。