#include <GL/glut.h>
void display();
void init();
int main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitWindowSize(400, 400);
glutInitWindowPosition(400, 200);
glutCreateWindow("几何图元类型");
glutDisplayFunc(display);
init();
glutMainLoop();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_LINE_STIPPLE);
glLineStipple(2, 0x0F0F);
glLineWidth(10.0f);
glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
void init()
{
glClearColor(0.0,0.0,0.0,0.0);
}
(1)直线可以指定宽度:
void glLineWidth(GLfloat width);
其用法跟glPointSize类似。
(2)画虚线。
首先,使用glEnable(GL_LINE_STIPPLE);来启动虚线模式(使用glDisable(GL_LINE_STIPPLE)可以关闭之)。
然后,使用glLineStipple来设置虚线的样式。
void glLineStipple(GLint factor, GLushort pattern);
pattern是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。
以下是一些例子:
![OpenGL入门学习笔记 (三) - Faye - Fayes blog](http://img4.ph.126.net/llnMA9EePbg_cJt8O42cGQ==/1179098677457959754.gif)
viod glLineStipple(GLint factor,GLshort
pattern); OpenGL中设置直线的当前点画模式。pattern参数是由1或0组成的16位序列,它们根据需要进行重复,对一条特定的直线进行点画处理。从这个模式的低位开始,一个像素一个像素的进行处理。如果模式中对应的位是1,就绘制这个像素,否则就不绘制。模式可以使用factor参数(表示重复因子)进行扩展,它与1和0的连续子序列相乘。因此,如果模式中出现了3个1,并且factor是2,那么它们就扩展为6个连续的1。必须以 GL_LINE_STIPPLE为参数调用glEnable()
才能启用直线点画功能。为了禁用直线点画功能,可以向glDisable()函数传递同一个参数。
例如:
glLineStipple(1, Ox3F07);
glEnable(GL_LINE_STIPPLE);
此时模式为Ox3F07(二进制形式为0011111100000111)
,它所画出来的直线是这样的:先连续绘制3个像素,然后连续5个像素留空,再连续绘制6
个像素,最后两个像素留空(注意,首先是从低位开始的)。如果factor是
2,那么这个模式便被扩展为:先连续绘制6个像素,然后连续
10个像素留空,再连续绘制12个像素,最后
4个像素留空。
如果没有启用点画线功能,OpenGL会自动把pattern当做为0xFFFF,把factor当成1。