opengl图形填充、正余弦曲线绘制、字符输出(C++)(共7页).doc

上传人:飞****2 文档编号:15053436 上传时间:2022-05-10 格式:DOC 页数:7 大小:79.50KB
返回 下载 相关 举报
opengl图形填充、正余弦曲线绘制、字符输出(C++)(共7页).doc_第1页
第1页 / 共7页
opengl图形填充、正余弦曲线绘制、字符输出(C++)(共7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《opengl图形填充、正余弦曲线绘制、字符输出(C++)(共7页).doc》由会员分享,可在线阅读,更多相关《opengl图形填充、正余弦曲线绘制、字符输出(C++)(共7页).doc(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上实验五1、 实验目的和要求了解且掌握图形填充、曲线绘制和字符输出等技术。2、 实验内容1) 用OpenGL实现用黑白相间的棋盘图案填充多边形2) 用OpenGL分别用点和折线模式实现正弦和余弦的绘制3) 用OpenGL在屏幕上输出”OpenGL”字样3、 实验步骤1) 相关算法及原理描述 图案填充多边形多边形模式设置函数为:void glPolygonMode(GLenum face,GLenum mode);控制多边形指定面的绘制模式。参数face为GL_FRONT、GL_BACK或GL_FRONT_AND_BACK;参数mode为 GL_POINT、GL_LINE

2、或GL_FILL,分别表示绘制轮廓点式多边形、轮廓线式多边形或全填充式多边形。缺省时,绘制的是正反面全填充式多边形。设置图案填充式多边形函数为:void glPolygonStipple(const GLubyte *mask);为当前多边形定义填充图案模式。参数mask是一个指向32x32位图的指针。与虚点线绘制的道理一样,某位为1时绘制,为0时什么也不绘。注意,在调用这个函数前,必须先启动一下,即用glEnable(GL_POLYGON_STIPPLE);不用时用glDisable(GL_POLYGON_STIPPLE) 关闭。 正弦和余弦曲线的绘制线的绘制需要用到GL_LINES模式,它

3、指定在glBegin/glEnd函数对中,从第一个点开始,两两构成一条直线段。绘制正余弦曲线的话,只需要编写一段循环语句,指定绘制路线,设置不同线型。 在屏幕上显示字符在OpenGL实用程序工具包中包含了一些预定义的字符库,用来显示点阵和矢量字符。函数 void glutBitmapCharacter(void *font,int character); 显示一个GLUT位图字符。其中font是GLUT符号常数,指定点阵字库。参数character采用ASCII编码的形式指定要显示的字符。用函数glutBitmapCharacter 显示字符时,是将当前的光栅位置作为字符的左下角点,函数执行后

4、,点阵字符装入刷新缓冲存储器,当前的光栅位置会在x坐标方向上获得一个字符宽度的增量,这样可以较轻易的生成一个水平方向的字符串。2) 程序调试、测试与运行结果分析 图案填充多边形 正余弦曲线的绘制 在屏幕上显示字符4、 实验总结这次的实验有三个,其中显示字符比较简单,只需要调用一个函数就可以完成,各字母对应的ASCII码查找也简单,所以完成的很快很顺利。再就是正余弦曲线的绘制,之前都有做过直线的绘制,基本都是大同小异,稍有难处的就是曲线坐标的确定。在函数中我用一段循环语句来确定曲线点的坐标。最难做的就是棋盘填充多边形了。这个实验的代码也很简单,遇到困难的是数组定义位图。其实数组的编写现在也没有搞

5、太明白,感觉设计起来很难,有在网上查资料,才最终解决了。对知识了解,但编写还是有些困难。这次的实验也是一样的有趣,吸引人,以后会更加努力的。5、 附录专心-专注-专业1) 棋盘填充多边形#includevoid Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);GLubyte tianchong=/* 填充模式定义 (32x32) */0x00, 0x01, 0x80, 0x00,0x00, 0x03, 0xc0, 0x00,0x0

6、0, 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

7、, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff,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,

8、 0x0f, 0xf0, 0x00,0x00, 0x07, 0xe0, 0x00,0x00, 0x03, 0xc0, 0x00,0x00, 0x01, 0x80, 0x00;void Display(void)glClear(GL_COLOR_BUFFER_BIT);/* 绘制一个指定图案填充的矩形 */glColor3f(0.1,0.8,0.7);glEnable(GL_POLYGON_STIPPLE); glPolygonStipple(tianchong);glRectf(50.0f,100.0f,150.0f,50.0f);/* 绘制一个指定图案填充的三角形*/glColor3f(0.

9、9,0.86,0.4);glPolygonStipple(tianchong);glBegin(GL_TRIANGLES);glVertex2i(10,10);glVertex2i(90,10);glVertex2i(10,90);glEnd(); glDisable (GL_POLYGON_STIPPLE);glFlush();glutSwapBuffers();int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);glutInitWindowSize(500,30

10、0);glutInitWindowPosition(100,100);glutCreateWindow(棋盘图形填充);glutDisplayFunc(Display);Initial();glutMainLoop();return 0;2) 正余弦曲线的绘制#include#include void MyDisplay();void Init();void DrawSin();void MyDisplay()glClear(GL_COLOR_BUFFER_BIT);DrawSin();glFlush();void Init()glColor3f(1.0f,0.0f,0.0f);glClear

11、Color(1.0f,1.0f,1.0f,1.0f);void DrawSin()const float factor=0.1;glBegin(GL_LINES);glVertex2f(-1,0);glVertex2f(1,0);glVertex2f(0,-1);glVertex2f(0,1);glEnd();/glLineStipple (5,0x1C47);/glBegin (GL_LINES); /用虚线绘制glBegin(GL_LINE_STRIP);for(float x=-1/factor;x1/factor;x+=0.001)glVertex2f(x*factor,sin(x)*

12、factor);glEnd();glBegin(GL_LINE_STRIP);for(float y=-1/factor;y1/factor;y+=0.001)glVertex2f(y*factor,cos(y)*factor);glEnd();glutSwapBuffers();int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,300);glutInitWindowPosition(100,150);glutCrea

13、teWindow(正余弦曲线绘制);Init();glutDisplayFunc(MyDisplay);glutMainLoop();return 0;3) 在屏幕显示字符#includeint winWidth=600,winHeight=300;void Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);void ChangeSize(int w,int h)winWidth=w; winHeight=h;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrt

14、ho2D(0.0,winWidth,0.0,winHeight);void Display(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);glutStrokeCharacter(GLUT_STROKE_ROMAN,79);glutStrokeCharacter(GLUT_STROKE_ROMAN,112);glutStrokeCharacter(GLUT_STROKE_ROMAN,101);glutStrokeCharacter(GLUT_STROKE_ROMAN,110);glutStrokeCharacter(GLU

15、T_STROKE_ROMAN,71);glutStrokeCharacter(GLUT_STROKE_ROMAN,76);glutSwapBuffers();int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);glutInitWindowSize(500,300);glutInitWindowPosition(100,100);glutCreateWindow(Write Words);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);Initial();glutMainLoop();return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com