OPengl中绘制线的类型有:GL_LINES,GL_LINE_STRIP和GL_LINE_LOOP。
GL_LINES
每一对顶点连接成一条线段
glBegin(GL_LINES); glVertex3f(100.0f, 100.0f,0.0f); glVertex3f(40.0f, 100.0f, 0.0f); glVertex3f(70.0f, 70.0f, 0.0f); glVertex3f(50.0f, 70.0f, 0.0f); glEnd();
GL_LINE_STRIP
点构成了连续线段
glBegin(GL_LINE_STRIP); glVertex3f(100.0f, 100.0f,0.0f); glVertex3f(40.0f, 100.0f, 0.0f); glVertex3f(70.0f, 70.0f, 0.0f); glVertex3f(50.0f, 70.0f, 0.0f); glEnd();
GL_LINE_LOOP
封闭的连续线段
glBegin(GL_LINE_LOOP); glVertex3f(100.0f, 100.0f,0.0f); glVertex3f(40.0f, 100.0f, 0.0f); glVertex3f(70.0f, 70.0f, 0.0f); glVertex3f(50.0f, 70.0f, 0.0f); glEnd();
点画线可以通过GL_LINE_STIPPLE设置,0xAAAA表示1010 1010 1010 1010 即像素点显示与不显示交替。
glEnable(GL_LINE_STIPPLE); glLineStipple(3,0xAAAA);
对线进行平滑处理,可以通过GL_LINE_SMOOTH
if (!glIsEnabled(GL_LINE_SMOOTH)) glEnable(GL_LINE_SMOOTH);
当前线的宽度可以通过GL_LINE_WIDTH得到,测试结果为1.0
GLfloat size; glGetFloatv(GL_LINE_WIDTH, &size);
线的宽度范围通过GL_LINE_WIDTH_RANGE得到,测试结果为0.5 - 10.0。即宽度范围0.5 - 10.0的线,可以做平滑处理。
GLfloat size[2]; glGetFloatv(GL_LINE_WIDTH_RANGE, size);
线的颗粒度可以通过GL_LINE_WIDTH_GRANULARITY得到,测试结果为0.125。
GLfloat granularity; glGetFloatv(GL_LINE_WIDTH_GRANULARITY, &granularity);