OpenGL,C ++ Cornered Box

时间:2015-07-05 15:43:23

标签: c++ opengl

我一直在为游戏(学校项目)制作GUI菜单,我们已经准备好了一个引擎模板,我们只需要制作一个GUI菜单。我和我的朋友在老师的帮助下设法制作了一个非填充的Box就是这个功能:

void BoxTest(float x, float y, float width, float height, float Width, Color color)
{
glLineWidth(3);
glBegin(GL_LINE_LOOP);
glColor4f(0, 0, 0, 1);
glVertex2f(x, y);
glVertex2f(x, y + height);
glVertex2f(x + width, y + height);
glVertex2f(x + width, y);
glEnd();
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glColor4f(color.r, color.g, color.b, color.a);
glVertex2f(x, y);
glVertex2f(x, y + height);
glVertex2f(x + width, y + height);
glVertex2f(x + width, y);
glEnd();
}

这就是现在的样子: http://gyazo.com/c9859e9a8e044e1981b3fe678f4fc9ab

问题是我希望它看起来像这样: http://gyazo.com/0499dd8324d24d63a54225bd3f28463d

因为它看起来好多了,但是我和我的朋友已经在这里坐了几天,不知道如何实现这个目标。

1 个答案:

答案 0 :(得分:2)

使用OpenGL线条基元,您必须将其分解为多行。 GL_LINE_LOOP创建一系列线,相互连接并在末尾关闭。不是你想要的。相反,你应该使用简单的GL_LINES。每两个glVertex调用(BTW:你不应该使用那些,因为glVertex非常过时;它已经过时了近20年)制作一行。

让我们来看看这个ASCII艺术:

0 --- 1    4 --- 3
|                |
2                5

8                b
|                |
6 --- 7    a --- 9

你画线段

  • 0 - 1
  • 0 - 2
  • 3 - 4
  • 3 - 5
  • 6 - 7
  • 6 - 8
  • 9 - a
  • 9 - b

将符号0 ... b替换为每个点的坐标,您可以将其设为

glBegin(GL_LINES);

glVertex( coords[0] );
glVertex( coords[1] );
glVertex( coords[0] );
glVertex( coords[2] );

glVertex( coords[3] );
glVertex( coords[4] );
glVertex( coords[3] );
glVertex( coords[5] );

glVertex( coords[6] );
glVertex( coords[7] );
glVertex( coords[6] );
glVertex( coords[8] );

glVertex( coords[9] );
glVertex( coords[0xa] );
glVertex( coords[9] );
glVertex( coords[0xb] );

glEnd();

作为最后的触摸,您可以将coords数组加载到OpenGL顶点数组中,并使用glDrawArrays或glDrawElements代替。