夏明轩计算机图形学实验Word格式文档下载.docx
- 文档编号:19470498
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:13
- 大小:210.86KB
夏明轩计算机图形学实验Word格式文档下载.docx
《夏明轩计算机图形学实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《夏明轩计算机图形学实验Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)
七、所附实验输出的结果或数据
本实验要求熟悉OpenGL基本图元函数的使用。
通过使用OpenGL及GLUT库在VisualC++环境下编写图形绘制程序掌握图形绘制的一般框架,从而为进一步做综合性的图形绘制实验奠定基础。
实验一:
OpenGL基本图元绘制实验
实验目的:
实验要求:
在两个具有不同属性的窗口中分别显示一个旋转的三角形来演示单缓存和双缓存,在旋转过程中不断改变图形的颜色,利用鼠标或菜单可终止/启动图形旋转。
实验内容:
程序包括哪些函数,各个函数的功能以及整个流程
实验二:
OpenGL三维观察综合实验
本实验要求对绘制的简单场景(可以自己拟定)综合利用几何变换或gluLookAt函数实现交互式三维观察程序,从而通过本实验加深理解计算机图形学中的三维图形绘制流程的工作原理。
对于绘制的立方体(也可以自己拟定)通过键盘移动视点,利用鼠标或键盘控制立方体的旋转方向,从不同角度观察各面颜色不同的立方体。
Windows系统,VisualC++,OpenGL及GLUT库
三、实验方法与步骤
(一)先配置环境,把相关文件放到相应的文件夹
C:
\ProgramFiles\MicrosoftVisualStudio\VC98\Include\GL
C:
\WINDOWS\system32
\ProgramFiles\MicrosoftVisualStudio\VC98\Lib
(二)再通过VC++进行编译,源代码如下
#include<
math.h>
ctime>
#defineDEG_TO_RAD0.017453
staticGLfloattheta=0.0;
staticGLintm=0;
intsingleb,doubleb;
voidmyinit()
{
glClearColor(1.0,1.0,1.0,1.0);
//glMatrixMode(GL_PROJECTION);
//gluOrtho2D(0.0,500.0,0.0,500.0);
}
voiddisplays()
glClear(GL_COLOR_BUFFER_BIT);
//glColor3f(1.0,0.0,0.0);
if(m==0)
{
glColor3f(1.0,0.0,0.0);
m+=1;
m=m%3;
}
elseif(m==1)
glColor3f(0.0,1.0,0.0);
elseif(m==2)
glColor3f(0.0,0.0,1.0);
glBegin(GL_POLYGON);
//glVertex2f(cos(DEG_TO_RAD*theta),sin(DEG_TO_RAD*theta));
//glVertex2f(-sin(DEG_TO_RAD*theta),cos(DEG_TO_RAD*theta));
//glVertex2f(-cos(DEG_TO_RAD*theta),-sin(DEG_TO_RAD*theta));
//glVertex2f(sin(DEG_TO_RAD*theta),-cos(DEG_TO_RAD*theta));
glVertex2f(cos(DEG_TO_RAD*theta),sin(DEG_TO_RAD*theta));
glVertex2f(cos(DEG_TO_RAD*theta+DEG_TO_RAD*120),sin(DEG_TO_RAD*theta+DEG_TO_RAD*120));
glVertex2f(cos(DEG_TO_RAD*theta+DEG_TO_RAD*240),sin(DEG_TO_RAD*theta+DEG_TO_RAD*240));
glEnd();
glFlush();
}
voiddisplayd()
glutSwapBuffers();
voidmyReshape(intw,inth)
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<
=h)
gluOrtho2D(-1.,1.,-1.*(GLfloat)h/(GLfloat)w,1.*(GLfloat)h/(GLfloat)w);
else
gluOrtho2D(-1.*(GLfloat)w/(GLfloat)h,1.*(GLfloat)w/(GLfloat)h,-1.,1.);
glMatrixMode(GL_MODELVIEW);
voidSpinDisplay(void)
theta=theta+1.0;
if(theta>
360.0)
theta=theta-360.0;
glutSetWindow(singleb);
glutPostWindowRedisplay(singleb);
glutSetWindow(doubleb);
glutPostWindowRedisplay(doubleb);
voidmouse(intbtn,intstate,intx,inty)
if(btn==GLUT_LEFT_BUTTON&
&
state==GLUT_DOWN)
glutIdleFunc(SpinDisplay);
if(btn==GLUT_MIDDLE_BUTTON&
glutIdleFunc(NULL);
voidmykey(unsignedcharkey,intx,inty)
if(key=='
Q'
||key=='
q'
)exit(0);
voidquit_menu(intid)
if(id==1)exit(0);
int_tmain(intargc,_TCHAR*argv[])
//glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
singleb=glutCreateWindow("
singlesquare"
);
myinit();
glutDisplayFunc(displays);
glutReshapeFunc(myReshape);
glutIdleFunc(SpinDisplay);
glutMouseFunc(mouse);
glutKeyboardFunc(mykey);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowPosition(310,0);
doubleb=glutCreateWindow("
doublesquare"
glutDisplayFunc(displayd);
glutCreateMenu(quit_menu);
glutAddMenuEntry("
quit"
1);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return0;
#include"
stdafx.h"
stdlib.h>
GL/glut.h>
GLfloatvertices[][3]={{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},{1.0,1.0,-1.0},
{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},{1.0,-1.0,1.0},
{1.0,1.0,1.0},{-1.0,1.0,1.0}};
staticGLfloattheta[]={0.0,0.0,0.0};
staticGLintaxis=2;
staticGLdoubleviewer[]={0.0,0.0,5.0};
voidpolygon(inta,intb,intc,intd)
{
glVertex3fv(vertices[a]);
glVertex3fv(vertices[b]);
glVertex3fv(vertices[c]);
glVertex3fv(vertices[d]);
voidcolorcube()
//正y前¡
ã
面?
glColor3f(1,1,1);
polygon(4,5,6,7);
//正y背À
3面?
glColor3f(1.0,0,0);
polygon(0,3,2,1);
glColor3f(0,1,0);
polygon(2,3,7,6);
glColor3f(0,0,1);
polygon(0,4,7,3);
glColor3f(1,1,0);
polygon(1,2,6,5);
glColor3f(0,1,1);
polygon(0,1,5,4);
voiddisplay()
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearDepth
(1);
glLoadIdentity();
//更¨
¹
新?
视º
¨
®
点Ì
?
位?
置?
gluLookAt(viewer[0],viewer[1],viewer[2],0.0,0.0,0.0,0.0,1.0,0.0);
glRotatef(theta[0],1.0,0.0,0.0);
glRotatef(theta[1],0.0,1.0,0.0);
/*旋y转Á
a立¢
¡
é
方¤
体¬
*/
glRotatef(theta[2],0.0,0.0,1.0);
colorcube();
voidkeys(unsignedcharkey,intx,inty)
{/*用®
x,X,y,Y,z,andZ键¨
移°
动¡
¥
*/
if(key=='
x'
)viewer[0]-=1.0;
X'
)viewer[0]+=1.0;
y'
)viewer[1]-=1.0;
Y'
)viewer[1]+=1.0;
z'
)viewer[2]-=1.0;
Z'
)viewer[2]+=1.0;
display();
{glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
if(w<
=h)glFrustum(-2.0,2.0,-2.0*(GLfloat)h/(GLfloat)w,
2.0*(GLfloat)h/(GLfloat)w,2.0,20.0);
elseglFrustum(-2.0,2.0,-2.0*(GLfloat)w/(GLfloat)h,
2.0*(GLfloat)w/(GLfloat)h,2.0,20.0);
/*或¨
°
者?
用®
gluPerspective(45.0,w/h,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
if(btn==GLUT_LEFT_BUTTON&
state==GLUT_DOWN)axis=0;
if(btn==GLUT_MIDDLE_BUTTON&
state==GLUT_DOWN)axis=1;
if(btn==GLUT_RIGHT_BUTTON&
state==GLUT_DOWN)axis=2;
theta[axis]+=2.0;
if(theta[axis]>
360.0)theta[axis]-=360.0;
argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(300,300);
glutCreateWindow("
cube"
glutDisplayFunc(display);
glutKeyboardFunc(keys);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
六、讨论与结论
通过本次试验,我进一步加深了对于基本画图算法的理解。
另外,通过实验训练了自己的编程能力,同时熟悉了OpenGL绘图的函数和流程,也进一步巩固了相关的知识。
对图形的变换开始并不了解但是经过自己看书知道图形变换并不是那么难的,知道图形变换的几个函数。
在这个坐标系中,可以对物体实施平移glTranslatef()、旋转glRotatef()和放大缩小glScalef()。
做了实验之后收获很多,结合课堂上老师的讲解,对计算机图形学从许多方面都有了一定的理解。
对更加深入学习计算机打下比较好的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 夏明轩 计算机 图形学 实验