资源描述:
《opengl图形填充、正余弦曲线绘制、字符输出(C++).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验五1、实验目的和要求了解且掌握图形填充、曲线绘制和字符输出等技术。2、实验内容1)用OpenGL实现用黑白相间的棋盘图案填充多边形2)用OpenGL分别用点和折线模式实现正弦和余弦的绘制3)用OpenGL在屏幕上输出”OpenGL”字样3、实验步骤1)相关算法及原理描述①图案填充多边形多边形模式设置函数为:voidglPolygonMode(GLenumface,GLenummode);控制多边形指定面的绘制模式。参数face为GL_FRONT、GL_BACK或GL_FRONT_AND_BACK;参数mode为GL_POINT、GL_LINE或GL_FILL,分别表示绘制轮
2、廓点式多边形、轮廓线式多边形或全填充式多边形。缺省时,绘制的是正反面全填充式多边形。设置图案填充式多边形函数为:voidglPolygonStipple(constGLubyte*mask);为当前多边形定义填充图案模式。参数mask是一个指向32x32位图的指针。与虚点线绘制的道理一样,某位为1时绘制,为0时什么也不绘。注意,在调用这个函数前,必须先启动一下,即用glEnable(GL_POLYGON_STIPPLE);不用时用glDisable(GL_POLYGON_STIPPLE)关闭。②正弦和余弦曲线的绘制线的绘制需要用到GL_LINES模式,它指定在glBegin/g
3、lEnd函数对中,从第一个点开始,两两构成一条直线段。绘制正余弦曲线的话,只需要编写一段循环语句,指定绘制路线,设置不同线型。③在屏幕上显示字符在OpenGL实用程序工具包中包含了一些预定义的字符库,用来显示点阵和矢量字符。函数voidglutBitmapCharacter(void*font,intcharacter);显示一个GLUT位图字符。其中font是GLUT符号常数,指定点阵字库。参数character采用ASCII编码的形式指定要显示的字符。用函数glutBitmapCharacter显示字符时,是将当前的光栅位置作为字符的左下角点,函数执行后,点阵字符装入刷新缓
4、冲存储器,当前的光栅位置会在x坐标方向上获得一个字符宽度的增量,这样可以较轻易的生成一个水平方向的字符串。1)程序调试、测试与运行结果分析①图案填充多边形①正余弦曲线的绘制①在屏幕上显示字符1、实验总结这次的实验有三个,其中显示字符比较简单,只需要调用一个函数就可以完成,各字母对应的ASCII码查找也简单,所以完成的很快很顺利。再就是正余弦曲线的绘制,之前都有做过直线的绘制,基本都是大同小异,稍有难处的就是曲线坐标的确定。在函数中我用一段循环语句来确定曲线点的坐标。最难做的就是棋盘填充多边形了。这个实验的代码也很简单,遇到困难的是数组定义位图。其实数组的编写现在也没有搞太明白,
5、感觉设计起来很难,有在网上查资料,才最终解决了。对知识了解,但编写还是有些困难。这次的实验也是一样的有趣,吸引人,以后会更加努力的。1、附录1)棋盘填充多边形#includevoidInitial(void){glClearColor(1.0f,1.0f,1.0f,1.0f);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);}GLubytetianchong[]={/*填充模式定义(32x32)*/0x00,0x01,0x80,0x00,0x00,0x03,0xc0,0x00,0x00
6、,0x07,0xe0,0x00,0x00,0x0f,0xf0,0x00,0x00,0x1f,0xf8,0x00,0x00,0x3f,0xfc,0x00,0x00,0x7f,0xfe,0x00,0x00,0xff,0xff,0x00,0x01,0xff,0xff,0x80,0x03,0xff,0xff,0xc0,0x07,0xff,0xff,0xe0,0x0f,0xff,0xff,0xf0,0x1f,0xff,0xff,0xf8,0x3f,0xff,0xff,0xfc,0x7f,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0
7、xff,0x7f,0xff,0xff,0xfe,0x3f,0xff,0xff,0xfc,0x1f,0xff,0xff,0xf8,0x0f,0xff,0xff,0xf0,0x07,0xff,0xff,0xe0,0x03,0xff,0xff,0xc0,0x01,0xff,0xff,0x80,0x00,0xff,0xff,0x00,0x00,0x7f,0xfe,0x00,0x00,0x3f,0xfc,0x00,0x00,0x1f,0xf8,0x00,0x00,0x0f,0xf0,0x00,0x00