使用opengl程序绘制实线、虚线和点划线
GIS专业实验报告(计算机图形学)
实验5 使用opengl程序绘制实线、虚线和点划线。
姓名系别班级学号实验日期指导教师实验成绩
殷悦地信10.4班2010203482 2013.6.12 肖燕
一.实验目的及要求
使用opengl程序绘制实线、虚线和点划线。。
二.理论基础
1.显示列表:
显示列表是一组OpenGL函数调用,它被存储起来供以后执行。这样就可以将基本图素的OpenGL函数实现组织起来,指定名称,构成图段,所构成的图段可以再以后需要的地方显示出来。
创建显示列表方式如下:
glNewList(listID,listMode);
glutSoildCube(2.0);
……
glEndList();
2.显示列表的调用:
在显示列表创建之后,可以使用函数
Void glCallList(GLuint listID);
调用显示列表,其中参数listID是已定义的显示列表标识。
3.OpenGL划线函数:
glBegin(GL_LINES);
glVertex2i(坐标1x,坐标1y);
glVertex2i(坐标2x,坐标2y);
glEnd();
GL_LINES:直线模式
GL_LINE_STIPPLE:虚线模式
三.算法设计与分析
程序源码如下:
#include
#include
GLuint Line;
void Initial(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
Line = glGenLists(1);
glNewList(Line, GL_COMPILE);
/************实线***************/
glColor3f(0.0, 1.0, 0.0);
glLineWidth(3);
glTranslatef(-20.0, 20.0, 0.0);
glBegin(GL_LINES); //实线
glVertex2i(-10,5);
glVertex2i(40,5);
glEnd();
/****************虚线*******************/
glColor3f(0.0, 0.0, 0.0);//更改颜色
glEnable(GL_LINE_STIPPLE); //声明线型为虚线;
glLineStipple (3, 0x0101); //设定线型
glLineWidth(2); //设定线宽
glBegin(GL_LINES);
glVertex2i(-20,-15);
glVertex2i(50,-15);
glEnd();
/**************点划线********************/
glColor3f(0.0, 0.0, 1.0);
glLineStipple (3, 0x0101); //设定线型
glLineWidth(5); //设定线宽,先画点
glBegin(GL_LINES);
glVertex2i(-20,-35);
glVertex2i(50,-35);
glEnd();
glLineStipple (6, 0x0606); //设定线型
glLineWidth(2); //设定线宽,再画线
glBegin(GL_LINES);
glVertex2i(-20,-35);
glVertex2i(50,-35);
glEnd();
glEndList();
}
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (-70.0f, 70.0f, -70.0f, 70.0f);
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, 0.0);
glCallList(Line);
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(200,200);
glutCreateWindow("OpenGL直线、点画线、虚线——姓名:殷悦——学号:2010203482");
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
Initial();
glutMainLoop();
return 0;
}
四.程序调试及运行结果的自我分析与自我评价
代码中调用了画线函数的两个不同模式,绘制实线模式(GL_LINES)和绘制虚线模式(GL_LINE_STIPPLE)。点划线是由两条虚线拼合而成,通过设置不同的点距、线宽和样式实现。三种线条一次设置了红、绿、蓝三种颜色,由上而下平行排列。
运行结果见下图1。
图1 调试结果
五、实验心得及建议
通过这次自己动手作程序,加深了对以往所学知识的了解和应用。把老师讲的东西,通过自己的努力和探索并加以研究,变成自己所能理解的东西。在已经基本上掌握了VB基础,又加深了各项功能的认识理解。我会把这次作业当作起点,更加加深对VB软件的研究,为自己可以早日熟练掌握此软件的各项操作步骤而努力。