收藏 分销(赏)

图形学第五章作业讲评.doc

上传人:s4****5z 文档编号:8954370 上传时间:2025-03-09 格式:DOC 页数:8 大小:67KB
下载 相关 举报
图形学第五章作业讲评.doc_第1页
第1页 / 共8页
图形学第五章作业讲评.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述
5.27试用OpenGL程序绘制实线、虚线和点划线。 #include "stdafx.h" //stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的//程序能在32位的操作系统环境下运行。 #include<gl/glut.h> void Init() { glClearColor(0.0,0.0,0.0,1.0); } void display() { // glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); //绘制实线 glColor3f(1.0,0.0,0.0); /*注意:glColor系列函数,在参数类型不同时,表示“最大”颜色的值也不同。 采用f和d做后缀的函数,以1.0表示最大的使用。 采用b做后缀的函数,以127表示最大的使用。 采用ub做后缀的函数,以255表示最大的使用。 采用s做后缀的函数,以32767表示最大的使用。 采用us做后缀的函数,以65535表示最大的使用。*/ glLineWidth(5); glBegin(GL_LINES); glVertex2f(0,200); glVertex2f(300,200); glEnd(); //绘制虚线 glColor3f(1.0,0.0,1.0);//紫色 glLineWidth(5); glEnable(GL_LINE_STIPPLE);//打开画线模式 glLineStipple(4,0x00FF); glBegin(GL_LINES); glVertex2f(0,250); glVertex2f(300,250); glEnd(); glDisable(GL_LINE_STIPPLE); //绘制点划线 glColor3f(1.0,1.0,0.0);//黄色 glLineWidth(5); glEnable(GL_LINE_STIPPLE); glLineStipple(2,0xFF0A); glBegin(GL_LINES); glVertex2f(0,300); glVertex2f(300,300); glEnd(); glDisable(GL_LINE_STIPPLE); glFlush(); } void changesize(GLsizei w,GLsizei h) { glViewport(100, 100, w, h); //设置视区尺寸 if(h==0) h=1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (0.0f, 500.0f, 0.0f, 500.0f*h/w, 1.0, -1.0); //gluOrtho2D(0.0f, 500.0f, 0.0f, 500.0f*h/w); else glOrtho (0.0f, 500.0f*w/h, 0.0f, 500.0f, 1.0, -1.0); } int main(int argc, char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(100,100); glutInitWindowSize(600,600); glutCreateWindow("绘制不同的直线"); glutDisplayFunc(display); glutReshapeFunc(changesize); Init(); glutMainLoop(); return 0; } 5.28试用OpenGL实现黑白相间的棋盘图案填充多边形。 #include "stdafx.h" #include<gl/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); GLubyte chess[]={//定义128字节大小的数组 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF }; //未填充的多边形 /* glBegin(GL_POLYGON); glVertex2f(100,100); glVertex2f(200,100); glVertex2f(200,400); glVertex2f(100,400); glEnd();*/ //填充的多边形 glEnable(GL_POLYGON_STIPPLE);//启用多边形填充模式 glPolygonStipple(chess);//指定chess数组定义的位图为填充模板 glBegin(GL_POLYGON); glVertex2f(200,100); glVertex2f(500,100); glVertex2f(500,500); glVertex2f(200,500); glEnd(); glDisable(GL_POLYGON_STIPPLE); glFlush(); } void changesize(int w,int h) { glViewport(0,0,w,h); if(h==0)h=1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(0,600,0,600*h/w,1,-1); else glOrtho(0,600*w/h,0,600,1,-1); } int main(int argc, char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowSize(600,600); glutInitWindowPosition(100,100); glutCreateWindow("填充多边形"); glutDisplayFunc(display); glutReshapeFunc(changesize); glutMainLoop(); return 0; } 5.29利用OpenGL,分别用点和折线模式实现正弦和余弦曲线的绘制。 #include "stdafx.h" #include<gl/glut.h> #include<math.h> #include<iostream.h> float k=0.05; int mode=1; void display() { glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); //画出坐标轴 glColor3f(1.0,1.0,1.0); glBegin(GL_LINES);//OpenGL默认坐标值只能从-1到1 glVertex2f(-1,0); glVertex2f(1,0); glVertex2f(0,1); glVertex2f(0,-1); glEnd(); if(mode==1) //画线 { cout<<"现在是线模式,要想转换到点模式请按下p键!"<<endl; //画正弦曲线 glColor3f(1.0,0.0,0.0); glBegin(GL_LINE_STRIP); /* for(float a=-1;a<=1;a=a+0.01) { glVertex2f(a,sin(a)); }*/ for(float i=-1/k;i<=1/k;i=i+0.01)//扩大20倍 { glVertex2f(i*k,sin(i)*0.3); } glEnd(); //画余弦曲线 glColor3f(0.0,1.0,0.0); glBegin(GL_LINE_STRIP); for(float j=-1/k;j<=1/k;j=j+0.01) { glVertex2f(j*k,cos(j)*0.3); } glEnd(); } if(mode==2)//画点 { cout<<"现在是点模式,要想转换到线模式请按下l键!"<<endl; glColor3f(1.0,1.0,0.0); glBegin(GL_POINTS); for(float m=-1/k;m<=1/k;m=m+0.05) { glVertex2f(m*k,sin(m)*0.3); } glEnd(); glColor3f(0.5,0.5,1.0); glBegin(GL_POINTS); for(float n=-1/k;n<=1/k;n=n+0.05) { glVertex2f(n*k,cos(n)*0.3); } glEnd(); } glFlush(); } void Key(unsigned char key,int x,int y)//实现键盘响应函数 { switch(key) { case 'p':mode=2;break; case 'l':mode=1;break; default:break; } glutPostRedisplay(); } int main(int argc, char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(600,600); glutInitWindowPosition(100,100); glutCreateWindow("正弦和余弦"); glutDisplayFunc(display); glutKeyboardFunc(Key); glutMainLoop(); return 0; } 5.30利用OpenGL在屏幕上输出"OpenGL"字样. #include "stdafx.h" #include<gl/glut.h> #include<string.h> /*void output(int x, int y, char *string) { int len, i; glRasterPos2f(x, y);//字符显示的位置 len = (int) strlen(string); for (i = 0; i < len; i++) { glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, string[i]);//字符的字体、大小和内容 } }*/ void display() { glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); //output(100,150,"OpenGL!"); //显示位图字符(指定使用固定宽度的字体) glColor3f(1.0,0,0.7); glRasterPos2f(100, 150);//字符显示的位置 glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'O'); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,112); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,101); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,110); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,71); glutBitmapCharacter(GLUT_BITMAP_9_BY_15,76); //显示位图字符(24磅的Times-Roman字体) glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,79); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,112); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,101); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,110); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,71); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,76); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,33); //显示矢量字符(显示一种等距的Roman Simplex字体) glColor3f(1.0,0,0); glutStrokeCharacter(GLUT_STROKE_ROMAN,'O'); glColor3f(0,1,0); glutStrokeCharacter(GLUT_STROKE_ROMAN,112); glColor3f(1.0,1,0); glutStrokeCharacter(GLUT_STROKE_ROMAN,101); glColor3f(1.0,0.5,0.5); glutStrokeCharacter(GLUT_STROKE_ROMAN,110); glColor3f(0.0,1,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,71); glColor3f(0.0,0,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,76); glColor3f(1,0.5,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,33); //显示矢量字符(显示一种单一间距的Roman Simplex字体) glColor3f(1.0,0,0); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,79); glColor3f(0,1,0); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,112); glColor3f(1.0,1,0); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,101); glColor3f(1.0,0.5,0.5); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,110); glColor3f(0.0,1,1); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,71); glColor3f(0.0,0,1); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,76); glFlush(); } void changesize(int w,int h) { glViewport(0,200,w,h); if(h==0)h=1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); // gluOrtho2D(0,w,0,h); if(w<=h) glOrtho(-120,600,-120,600*h/w,1,-1); else glOrtho(-120,600*w/h,-120,600,1,-1); } int main(int argc, char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(600,600); glutInitWindowPosition(100,100); glutCreateWindow("显示字符"); glutDisplayFunc(display); glutReshapeFunc(changesize); glutMainLoop(); return 0; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服