计算机图形学黄欣212318.docx

上传人:b****5 文档编号:3277301 上传时间:2022-11-21 格式:DOCX 页数:20 大小:407.90KB
下载 相关 举报
计算机图形学黄欣212318.docx_第1页
第1页 / 共20页
计算机图形学黄欣212318.docx_第2页
第2页 / 共20页
计算机图形学黄欣212318.docx_第3页
第3页 / 共20页
计算机图形学黄欣212318.docx_第4页
第4页 / 共20页
计算机图形学黄欣212318.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算机图形学黄欣212318.docx

《计算机图形学黄欣212318.docx》由会员分享,可在线阅读,更多相关《计算机图形学黄欣212318.docx(20页珍藏版)》请在冰豆网上搜索。

计算机图形学黄欣212318.docx

计算机图形学黄欣212318

计算机图形学

姓名:

黄欣学号:

2013212318日期:

2015.12.27

1.创建新项目

1)点击文件-->新建-->项目

2)选择VisualC++中的Win32控制台应用程序,修改文件名,最后点击确定即可

3)点击下一步

4)勾选空项目,点击完成

5)右键点击新建好的test1下的资源文件-->添加-->新建项

6)选择C++文件,修改文件名即可

2.在创建的新项目中,写程序代码。

第二次作业地图绘制

#include

#include

#include

#include

usingnamespacestd;

classMapPoint

{

public:

doublelongitude;//经度

doublelatitude;//纬度

};

classPolygon

{

public:

vectorPoints;//多边形的顶点序列

};

vectorpolys;//多边形集合

vectorReadMapData(char*filename)//文件名

{

intPointCount;//计算点的个数

vectorPolygons;

ifstreamfs(filename);//寻找filename文件是否为空

while(fs.eof()!

=true)

{

Polygon*poly=newPolygon;//定点个数

fs>>PointCount;//定点个数赋值给fs

cout<

for(inti=0;i

{

MapPointp;//地图名

fs>>p.longitude>>p.latitude;

poly->Points.push_back(p);

}

Polygons.push_back(poly);

}

returnPolygons;

}

voiddisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT);//用蓝色绘制各省边界

glColor3f(0.0,0.0,1.0);//设置正面为填充模式

glPolygonMode(GL_BACK,GL_LINE);

for(inti=0;i

{

vectorPoints=polys[i]->Points;

glBegin(GL_LINE_LOOP);//使用闭合曲线方式绘制各省边界

for(intj=0;j

{

glVertex3f(Points[j].longitude,Points[j].latitude,0.0);

}

glEnd();

}

glFlush();

}

voidinit(void)

{

//设置背景颜色

glClearColor(1.0,1.0,1.0,0.0);

//初始化观察值

glMatrixMode(GL_PROJECTION);//将矩阵模式设为投影

glLoadIdentity();//对矩阵进行单位化

glOrtho(108.0,120.0,30.0,38.0,-2.0,2.0);

//构造平行投影矩阵,注意坐标的位置

}

intmain(intargc,char**argv)//主函数

{

char*filename="D:

/HenanCounty.txt";//文件名与文件目录对应

polys=ReadMapData(filename);//读定义的文件给ploys

glutInit(&argc,argv);//初始化

glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);//单存缓和RGB

glutInitWindowPosition(100,100);//窗口位置

glutInitWindowSize(450,450);//窗口大小

glutCreateWindow("henancountry");//窗口标题

init();

glutDisplayFunc(display);//设置一个函数,当需要画图时,调用该函数

glutMainLoop();//进行消息循环

return0;

}

第五章、二维观察

红蓝三角形

#include

typedefGLfloatpoint2d[2];//点数据类型

voidtriangle(point2da,point2db,point2dc)//显示一个三角形

{

glBegin(GL_TRIANGLES);

glVertex2fv(a);

glVertex2fv(b);

glVertex2fv(c);

glEnd();

}

voiddisplay(void)

{

point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点

glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口

glColor3f(0,0,1);//设置填充颜色为蓝色

glViewport(0,0,300,400);//设置左视区

triangle(v[0],v[1],v[2]);//三个顶点

glColor3f(1,0,0);//设置填充颜色为红色

glViewport(300,0,300,400);设置右视区

glRotatef(90,0,0,1);关于z轴旋转

triangle(v[0],v[1],v[2]);显示蓝色三角形

glFlush();

}

voidinit()

{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(-2,2,-2,2);

glMatrixMode(GL_MODELVIEW);

glClearColor(1,1,1,1);//蓝色

}

voidmain(intargc,char**argv)//显示窗体

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(600,400);

glutCreateWindow("Triangle");

glutDisplayFunc(display);

init();

glutMainLoop();

}

这次编程让我学会了画三角形,填充三角形颜色,还有旋转三角形。

四棱锥和立方体实体模型

#include

typedefGLfloatpoint2d[2];//点数据类型

voidtriangle(point2da,point2db,point2dc)//显示一个三角形

{

glBegin(GL_TRIANGLES);

glVertex2fv(a);

glVertex2fv(b);

glVertex2fv(c);

glEnd();

}

voiddisplay(void)

{

point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点

glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口

glColor3f(0,0,1);//设置填充颜色为蓝色

glViewport(0,0,300,400);//设置左视区

triangle(v[0],v[1],v[2]);//三个顶点

glColor3f(1,0,0);//设置填充颜色为红色

glViewport(300,0,300,400);//设置右视区

glRotatef(90,0,0,1);//关于z轴旋转

triangle(v[0],v[1],v[2]);//显示蓝色三角形

glFlush();

}

voidinit()

{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(-2,2,-2,2);

glMatrixMode(GL_MODELVIEW);

glClearColor(1,1,1,1);//蓝色

}

voidmain(intargc,char**argv)//显示窗体

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(600,400);

glutCreateWindow("Triangle");

glutDisplayFunc(display);

init();

glutMainLoop();

}

第六章三维观察

立方体透视投影

#include

GLintwinWidth=600,winHeight=600;//设置初始化窗口大小

/*观察坐标系参数设置*/

GLfloatx0=0,y0=0,z0=5;//设置观察坐标系原点

GLfloatxref=0.0,yref=0.0,zref=0.0;//设置观察坐标系参考点(视点)

GLfloatVx=0.0,Vy=1.0,Vz=0.0;//设置观察坐标系向上向量(y轴)

/*观察体(视见体)参数设置*/

GLfloatxwMin=-1.0,ywMin=-1.0,xwMax=1.0,ywMax=1.0;//设置裁剪窗口坐标范围

GLfloatdnear=1.5,dfar=20;//设置远、近裁剪面深度范围

voidinit(void)

{

glClearColor(1,1,1,0);

//glShadeModel(GL_FLAT);//xz

/*①观察变换*/

/*视点变换*/

gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);//指定三维观察参数

/*模型变换*/

glMatrixMode(GL_MODELVIEW);

glScalef(2,2,2);//比例放缩变换扩大两倍

glRotatef(45,0,1,1);//旋转变换

/*②投影变换*/

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);//透视投影,设置透视视景体

}

voiddisplayFcn(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0,1,0);//设置前景色为绿色

glutSolidCube

(1);//绘制单位立方体实体

glColor3f(0,0,0);//设置前景色为黑色

glLineWidth

(2);//设置线宽

glutWireCube

(1);//绘制单位立方体线框

glFlush();

}

voidreshapeFcn(GLintnewWidth,GLintnewHeight)

{

/*③视口变换*/

glViewport(0,0,newWidth,newHeight);//定义视口大小

winWidth=newWidth;

winHeight=newHeight;

}

voidmain(intargc,char**argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(100,100);

glutInitWindowSize(winWidth,winHeight);

glutCreateWindow("单位立方体的透视投影");

init();

glutDisplayFunc(displayFcn);

glutReshapeFunc(reshapeFcn);

glutMainLoop();

}

第七章、BeZier曲线绘制

#include

GLfloatctrlpoints[4][3]={{-4,-4,0},{-2,3,0},{2,4.5,0},{3,-3,0}};

voidinit(void)

{

glClearColor(1,1,1,0);

glShadeModel(GL_FLAT);

//下行用于定义曲线函数

glMap1f(GL_MAP1_VERTEX_3,0,1,3,4,&ctrlpoints[0][0]);

glEnable(GL_MAP1_VERTEX_3);//将当前曲线激活

}

voiddisplay(void)

{

inti;

glClear(GL_COLOR_BUFFER_BIT);

//下面用求值器按20等分计算BeZier曲线上的点

glColor3f(0,0,0);

glLineWidth

(2);

glBegin(GL_LINE_STRIP);

for(i=0;i<20;i++)

glEvalCoord1f((GLfloat)i/20);

glEnd();

glLineWidth

(1);

glColor3f(0,0,1);

glBegin(GL_LINE_STRIP);

for(i=0;i<4;i++)

glVertex3fv(&ctrlpoints[i][0]);

glEnd();

glFlush();

}

voidreshape(intw,inth)

{

glViewport(0,0,(GLsizei)w,(GLsizei)h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

if(w<=h)

glOrtho(-5,5,-5*(GLfloat)h/(GLfloat)w,5*(GLfloat)h/(GLfloat)w,-5,5);

else

glOrtho(-5*(GLfloat)w/(GLfloat)h,5*(GLfloat)w/(GLfloat)h,-5,5,-5,5);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

intmain(intargc,char**argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(100,100);

glutInitWindowSize(500,500);

glutCreateWindow(argv[0]);

init();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutMainLoop();

return0;

}

2.BeZier曲线绘制

#include

GLfloatctrlpoints[4][4][3]={{{-3,-0,4},{-2,0,2},{-1,0,0},{0,0,2}},{{-3,1,1},{-2,1,3},{-1,1,6},{0,1,-1}},

{{-3,2,4},{-2,2,0},{-1,2,3},{0,2,4}},{{-3,3,0},{-2,3,0},{-1,3,0},{0,3,0}}};

voiddisplay(void)

{

inti,j;

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glColor3f(0,0,0);

glPushMatrix();

glRotatef(85,1,1,1);

for(j=0;j<=20;j++)

{

glBegin(GL_LINE_STRIP);

for(i=0;i<=20;i++)

glEvalCoord2f((GLfloat)i/20,(GLfloat)j/20);

glEnd();

glBegin(GL_LINE_STRIP);

for(i=0;i<=20;i++)

glEvalCoord2f((GLfloat)j/20,(GLfloat)i/20);

glEnd();

}

glPopMatrix();

glFlush();

}

voidinit(void)

{

glClearColor(1,1,1,1);

glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]);

glEnable(GL_MAP2_VERTEX_3);

glOrtho(-5,5,-5,5,-5,5);

}

intmain(intargc,char**argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);

glutInitWindowPosition(100,100);

glutInitWindowSize(500,500);

glutCreateWindow(argv[0]);

init();

glutDisplayFunc(display);

glutMainLoop();

return0;

}

最后一次作业:

茶壶绘制

#include

#include

voidinit(void)

{

/*设置材质的镜面反射光的反射系数*/

GLfloatmat_specular[]={1.0,1.0,1.0,1.0};

/*设置材质的镜面反射系数*/

GLfloatmat_shininess[]={50.0};

/*设置光源位置的值*/

GLfloatlight_position[]={1.0,1.0,1.0,0.0};

/*设置漫反射光和折射光分量强度的值*/

GLfloatwhite_light[]={1.0,1.0,1.0,1.0};

/*设置点光源的颜色*/

GLfloatLight_Model_Ambient[]={0.2,0.2,0.2,1.0};

/*清除窗口的颜色,显示为黑色*/

glClearColor(0.0,0.0,0.0,0.0);

/*设置阴影模型*/

glShadeModel(GL_SMOOTH);

/*设置表面特性函数,指定物体正面被赋予制定材质,设置镜面反射光的反射系数和镜面反射系数*/

glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);

glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);

//建立光源

/*设置一个OpenGL光源,设置光源位置,light_position为它的属性值,

这是先前设置的量*/

glLightfv(GL_LIGHT0,GL_POSITION,light_position);

/*设置光源的设置漫反射光分量强度,white_light为它的属性值,这是先前设置的量*/

glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);

/*设置光源的设置直射光分量强度,white_light为它的属性值,这是先前设置的量*/

glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);

/*设置点光源的颜色*/

glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient);

/*启用光照模型,glEnable()是用于启用各种功能,与glDisabale()相对应*/

glEnable(GL_LIGHTING);

/*启用GL_LIGHT0这个光源*/

glEnable(GL_LIGHT0);

/*启用更新深度缓存区功能*/

glEnable(GL_DEPTH_TEST);

}

voiddisplay(void)

{

/*清除颜色缓存和深度缓存*/

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

//glutSolidSpehere(1.0,20,16);

/*显示茶壶*/

glutSolidTeapot(0.5);

/*强制刷新缓冲,保证绘图的命令将被执行,而不是存储在缓冲区等待其他命令*/

glFlush();

}

voidreshape(intw,inth)

{

/*视口函数,0,0是指定了窗口的左下角,以(0,0)为原点位置,指定已定义的w,h为视口矩形的宽度和高度*/

glViewport(0,0,(GLsizei)w,(GLsizei)h);

/*指定GL_PROJECTION矩阵为当前矩阵*/

glMatrixMode(GL_PROJECTION);

/*重置当前矩阵为单位矩阵*/

glLoadIdentity();

/*for循环,glOrtho创建一个平行的视景体*/

if(w<=h)

{

glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);

}

else

glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);

/*指定GL_MODELVIEW矩阵为当前矩阵*/

glMatrixMode(GL_MODELVIEW);

/*重置当前矩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1