版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华北电力大学科技学院实验报告||实验名称OpenGL基本图元绘制实验课程名称计算机图形学||专业班级:软件学生姓名学号:成绩:指导教师:实验日期:华北电力大学科技学院实验报告第页共页OpenGL基本图元绘制实验一、实验目的及要求本实验要求熟悉OpenGL基本图元函数的使用。通过使用OpenGL及GLUT库在VisualC++环境下编写图形绘制程序掌握图形绘制的一般框架,从而为进一步做综合性的图形绘制实验奠定基础在两个具有不同属性的窗口中分别显示一个旋转的三角形来演示单缓存和双缓存,利用鼠标或菜单可终止/启动图形旋转。二、所用仪器、设备WindowsXP系统,VisualC++,OpenGL及GLUT库三、实验方法与步骤先配置环境,把相关文件放到相应的文件夹C:\ProgramFiles\MicrosoftVisualStudio\VC98\Include\GLC:\WINDOWS\system32C:\ProgramFiles\MicrosoftVisualStudio\VC98\Lib再通过VC++进行编译四、源代码#include<gl/glut.h>#include<stdlib.h>#include<stdio.h>#include<math.h>#defineDEG_TO_RAD0.017453staticGLfloattheta=0.0;GLfloatr=1.0;//设置三角形的初始颜色GLfloatg=0.0;GLfloatb=0.0;intsingleb,doubleb;voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);//三角形颜色渐变glColor3f(r,g,b);r=r-0.002;g=g+0.002;b=b+0.001;if(r<0.001){ r=1.0;g=0.0;b=0.0; }glBegin(GL_POLYGON);glVertex2f(cos(DEG_TO_RAD*theta),sin(DEG_TO_RAD*theta));glVertex2f(cos(DEG_TO_RAD*(theta+120)),sin(DEG_TO_RAD*(theta+120)));glVertex2f(cos(DEG_TO_RAD*(theta+240)),sin(DEG_TO_RAD*(theta+240))); glEnd();glutSwapBuffers(); } voidspinDisplay(void)//三角形转动弧度设置{ theta=theta+5; if(theta>360.0) theta=theta-360.0; glutSetWindow(singleb); glutPostWindowRedisplay(singleb); glutSetWindow(doubleb); glutPostWindowRedisplay(doubleb); }voidspinDisplay1(void){ glutPostRedisplay();}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.);}voidmouse(intbutton,intstate,intx,inty)//鼠标定义{ switch(button){caseGLUT_LEFT_BUTTON:if(state==GLUT_DOWN){ glutIdleFunc(spinDisplay1);}break; caseGLUT_RIGHT_BUTTON: if(state==GLUT_DOWN) glutIdleFunc(spinDisplay); break; default: break;}}voidmain(intargc,char**argv)//主函数{ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowPosition(200,100); glutInitWindowSize(500,500); singleb=glutCreateWindow("单"); glClearColor(1.0,1.0,0.0,0.1); glutDisplayFunc(display); glutReshapeFunc(myReshape); glutIdleFunc(spinDisplay); glutMouseFunc(mouse); glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowPosition(600,100); glutInitWindowSize(500,500); doubleb=glutCreateWindow("双"); glClearColor(1.0,1.0,0.0,0.1); glutDisplayFunc(display); glutReshapeFunc(myReshape); glutIdleFunc(spinDisplay); glutMouseFunc(mouse); glutMainLoop();}五、实验结果与数据处理程序运行后,弹出两个窗口,里面的三角形旋转的同时逐渐变色;可用鼠标控制,点击左键三角形停止旋转,点击右键三角形继续旋转。六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)通过本次试验,熟悉了OpenGL基本图元函数的使用,通过使用OpenGL及GLUT库在VisualC++环境下编写图形绘制程序掌握图形绘制的一般框架,从而为进一步做综合性的图形绘制实验奠定基础。七、所附实验输出的结果或数据OpenGL三维观察综合实验实验目的及要求本实验要求对绘制的简单场景(可以自己拟定)综合利用几何变换或gluLookAt函数实现交互式三维观察程序,从而通过本实验加深理解计算机图形学中的三维图形绘制流程的工作原理。对于绘制的立方体(也可以自己拟定)通过键盘移动视点,利用鼠标或键盘控制立方体的旋转方向,从不同角度观察各面颜色不同的立方体。二、所用仪器、设备WindowsXP系统,VisualC++,OpenGL及GLUT库三、实验方法与步骤先配置环境,把相关文件放到相应的文件夹C:\ProgramFiles\MicrosoftVisualStudio\VC98\Include\GLC:\WINDOWS\system32C:\ProgramFiles\MicrosoftVisualStudio\VC98\Lib再通过VC++进行编译四、源代码//2.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<stdlib.h>#include<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){glBegin(GL_POLYGON);glVertex3fv(vertices[a]);glVertex3fv(vertices[b]);glVertex3fv(vertices[c]);glVertex3fv(vertices[d]);glEnd();}voidcolorcube(){//正前面glColor3f(1,1,1);polygon(4,5,6,7);//正背面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);/*旋转立方体*/glRotatef(theta[2],0.0,0.0,1.0);colorcube();glutSwapBuffers();}voidkeys(unsignedcharkey,intx,inty){/*用x,X,y,Y,z,andZ键移动视点*/if(key=='x')viewer[0]-=1.0;if(key=='X')viewer[0]+=1.0;if(key=='y')viewer[1]-=1.0;if(key=='Y')viewer[1]+=1.0;if(key=='z')viewer[2]-=1.0;if(key=='Z')viewer[2]+=1.0;display();}voidmyReshape(intw,inth){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();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);}voidmouse(intbtn,intstate,intx,inty){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[ax
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026枣庄学校面试题型及答案
- 2026招录人员面试题库及答案
- 2026-2030停车场行业市场发展现状及并购重组策略与投融资研究报告
- 2018学年人教版八年级上册物理第七章力期中复习试卷(学生用)
- 部编版五年级语文上册期中考试卷及答案【完整版】
- 2026年护理核心制度培训课件
- 2026年银行招聘考试综合知识专项训练试卷(含数学)
- 2026年事业单位A类综合应用能力冲刺试卷案例分析真题解析
- 2026年会计专业技术资格考试初级实务冲刺押题
- 北京市东城区北京汇文中学教育集团2024-2025学年高二上学期期中地理试题(含答案)
- 2025年中国远洋渔业行业市场全景评估及发展战略规划报告
- 高原肺水肿护理查房
- 住院患者烫伤应急预案及处理流程
- 卫健委十八项医疗核心制度
- 湖南省建设工程消防技术标准疑难问题解析
- Unit7单元整体教学设计八年级英语下册(人教版)
- TZWEIA 002-2023 水利水电工程接地用铜绞线技术条件
- 郝万山教授要求必背的112条《伤寒论》论原文
- 河南省新乡市第二十二中学2023-2024学年九年级上学期10月月考数学试题
- 压铸模具保养规定
- 2023年公务员体检表
评论
0/150
提交评论