#define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); \
glVertex2f((x1),(y1)); \
glVertex2f((x2),(y2)); \
glEnd();
void init(void)
{
//指定屏幕清除颜色。
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
//指定图像的着色方式。
glShadeModel(GL_FLAT);
}
void display(void)
{
//使用当前设置的颜色清屏,如果不这么做,你得到的是一个很花,并且没有规律的背景
glClear(GL_COLOR_BUFFER_BIT);
//设置划线的颜色为红色
glColor3f(1.0f, 0.0f, 0.0f);
//启用点画模式
glEnable(GL_LINE_STIPPLE);
//每位代表1个像素,8位有,8位空白
glLineStipple(1, 0x0F0F);
//画线
drawOneLine(50.0f, 125.0f, 150.0f, 125.0f);
//每位代表2个像素,16位有,16位空白
glLineStipple(2, 0x0F0F);
//画线
drawOneLine(50.0f, 100.0f, 150.0f, 100.0f);
//关闭点画模式
glDisable(GL_LINE_STIPPLE);
//刷新界面。
glFlush();
}
void reshape(int w, int h)
{
//viewport并非必须调用,缺省是屏幕大小,指定需要作业的屏幕大小,不能大于窗口大小。
glViewport(0.0f, 0.0f, (GLsizei)w, (GLsizei)h);
//指定下面矩阵操作函数操作的矩阵。
glMatrixMode(GL_PROJECTION);
//恢复单位矩阵
glLoadIdentity();
//创建一个正交平行的视景体,这个其实gl中坐标的的大小,分别代表x,y,z,每组两个,比如前两个代表x的最大负值和最大正值。
//这里使得需要实景图和整个窗口一样大小,并且坐标大小和窗口像素一样。
gluOrtho2D(0.0f, (GLfloat)w, 0.0f, (GLfloat)h);
}
int main (int argc, char * argv[])
{
//glut严格的说不是opengl的一部分,是为了支持使用opengl的程序方便的创建和管理窗口而做的,
//下面是它的初始化工作,一般情况下,我们需要把main函数的argv前面的const修饰词去掉,以减少一个警告
glutInit(&argc, argv);
//初始化窗口的显示模式,使用双缓冲系统,颜色使用rgb,
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
//初始化窗口大小为400*150
glutInitWindowSize(400, 150);
//初始化窗口的为止为x = 100,y = 100
glutInitWindowPosition(100, 100);
//创建标题为工程名称 的窗口
glutCreateWindow(argv[0]);
//初始化opengl
init();
//设置显示回调函数
glutDisplayFunc(display);
//设置窗口大小变化的时候的回调函数。
glutReshapeFunc(reshape);
//程序开始运行。
glutMainLoop();
//严格的说,下面这句话不会执行到,只是为了符合iso标准C的格式。
return 0;
}