我一直在为游戏(学校项目)制作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
因为它看起来好多了,但是我和我的朋友已经在这里坐了几天,不知道如何实现这个目标。
答案 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 ... 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代替。