欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机图形学实验内容.pdf

    • 资源ID:43583937       资源大小:1.38MB        全文页数:57页
    • 资源格式: PDF        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机图形学实验内容.pdf

    电脑图形学实验电脑图形学实验肖加清肖加清1实验一实验一图形学实验基础图形学实验基础一、实验目的实验目的(1)掌握 VC+绘图的一般步骤;(2)掌握 OpenGL 软件包的安装方法;(3)掌握 OpenGL 绘图的一般步骤;(4)掌握 OpenGL 的主要功能与基本语法。二、实验内容二、实验内容1 1、VC+VC+绘图实验绘图实验1实验内容:以下是绘制金刚石图案。已给出VC+参考程序,但里面有部分错误,请改正,实现以下列图案。N=3N=42N=5N=10N=303N=50(2)参考程序/自定义的一个类/此代码可以放在视图类的实现文件(.cpp)里class CP2public:CP2();virtual CP2();CP2(double,double);double x;double y;CP2:CP2()this-x=0.0;this-y=0.0;CP2:CP2()CP2:CP2(double x0,double y0)this-x=x0;this-y=y0;4/视图类的一个成员函数,这个成员函数可以放在OnDraw 函数里调用。/在视图类的头文件.h里定义此函数void Diamond();/在视图类的实现文件.cpp里实现此函数void CTestView:Diamond()CP2*P;int N;double R;R=300;N=10;P=new CP2N;CClientDC dc(this);CRect Rect;GetClientRect(&Rect);double theta;theta=2*PI/N;for(int i=0;iN;i+)Pi.x=R*cos(i*theta);Pi.y=R*sin(i*theta);for(i=0;i=N-2;i+)for(int j=i+1;j=N-1;j+)/其中 ROUND 函数需要自己实现,实现四舍五入的功能。dc.MoveTo(ROUND(Pi.x+Rect.right/2),ROUND(Pi.y+Rect.bottom/2);dc.LineTo(ROUND(Pj.x+Rect.right/2),ROUND(Pj.y+Rect.bottom/2);delete P;2 2、OpenGLOpenGL 绘图绘图1以下是用 OpenGL 绘制茶壶的代码,请在 OpenGL 环境下运行,分析 OpenGL 程序的结构#include#include#include#include/定义输出窗口的大小#define WINDOW_HEIGHT 3005#define WINDOW_WIDTH 500/用户初始化函数void myninit(void);/窗口大小变化时的回调函数void CALLBACK myReshape(GLsizei w,GLsizei h);/每帧 OpenGL 都会调用这个函数,应该把显示代码放在这个函数中void CALLBACK display(void);int window_width=WINDOW_WIDTH;int window_height=WINDOW_HEIGHT;/视点离物体的距离float distance=3.6f;/初始化,此时为空,可以在这里进行初始化操作void myinit(void)void CALLBACK display(void)/设置清屏的颜色,并清屏和深度缓冲glClearColor(0.0f,0.0f,0.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);/设置成模型矩阵模式glMatrixMode(GL_MODELVIEW);/载入单位化矩阵glLoadIdentity();/坐标中心向 Z 轴平移-distance,这样使坐标中心位于视点前方glTranslatef(0.0,0.0,-distance);/在坐标中心显示一个茶壶auxWireTeapot(1.0);/等待现有的 OpenGL 命令执行完成glFlush();/交换前后缓冲区auxSwapBuffers();void CALLBACK myReshape(GLsizei w,GLsizei h)if(!h)return;/这定视区glViewport(0,0,w,h);/设定透视方式glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0,1.0*(GLfloat)w/(GLfloat)h,1.0,30.0);window_width=w;window_height=h;6/移近移远的回调函数void CALLBACK MoveNear(void)distance-=0.3f;void CALLBACK MoveFar(void)distance+=0.3f;/主函数int main(int argc,char*argv)/初始化 OpenGL 的显示方式auxInitDisplayMode(AUX_DOUBLE|AUX_RGB|AUX_DEPTH16);/设定 OpenGL 窗口位置和大小auxInitPosition(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);/打开窗口auxInitWindow(OpenGL的一个简单的例子!);/调用初始化函数myinit();/设定窗口大小变化的回调函数auxReshapeFunc(myReshape);/设定移动视点的回调函数auxKeyFunc(A,MoveNear);/按 A 键变大auxKeyFunc(a,MoveFar);/按 a 键变小/使 display 函数一直被调用auxIdleFunc(display);/开始 OpenGL 的循环auxMainLoop(display);/结束程序return(0);其运行结果如下图:72 2OPENGLOPENGL 绘制矩形的简单例子绘制矩形的简单例子参考程序:#include void Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);/设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION);/设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0);void Display(void)glClear(GL_COLOR_BUFFER_BIT);/用当前背景色填充窗口glColor3f(1.0f,0.0f,0.0f);/设置当前的绘图颜色为红色glRectf(50.0f,100.0f,150.0f,50.0f);/绘制一个矩形glFlush();/处理所有的 OpenGL 程序int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);/初始化窗口的显示模式glutInitWindowSize(400,300);/设置窗口的尺寸glutInitWindowPosition(100,120);/设置窗口的位置glutCreateWindow(矩形);/创建一个名为矩形的窗口glutDisplayFunc(Display);/设置当前窗口的显示回调函数8Initial();/完成窗口初始化glutMainLoop();/启动主 GLUT 事件处理循环return 0;三、实验结果分析三、实验结果分析实验二实验二 直线生成算法与用户接口与交互式技术直线生成算法与用户接口与交互式技术一、实验目的一、实验目的1、掌握直线生成算法1 DDA 算法2Bresenham 算法2、掌握交互式技术1鼠标2键盘数字键、字母键、功能键和特殊键3、实现拾取操作二、实验内容1 1、以下给出了、以下给出了 DDADDA 算法的算法的 C+C+代码,请参考用代码,请参考用 Visual C+Visual C+实现实现 BresenhamBresenham 算法。算法。实现实现 DDADDA 画线程序画线程序实验步骤:1 建立一个 DDALine 的工程文件;2 添加 ddaline()成员函数方法:在工作区中选择 CLASSVIEW 类窗口,右击 CDDAlineView 类,选择“add memberfunction”,定义如下的成员函数:void ddaline(CDC*pDC,int x0,int y0,int x1,int y1,COLORREF color);3 编写自定义的成员函数ddaline()程序void CDDALineView:ddaline(CDC*pDC,int x0,int y0,int x1,int y1,COLORREF color)int length,i;float x,y,dx,dy;length=abs(x1-x0);if(abs(y1-y0)length)length=abs(y1-y0);dx=(x1-x0)/length;dy=(y1-y0)/length;9x=x0+0.5;y=y0+0.5;for(i=1;iSetPixel(int)x,(int)y,color);x=x+dx;y=y+dy;4编写 OnDraw()函数void CDDALineView:OnDraw(CDC*pDC)CDDALineDoc*pDoc=GetDocument();ASSERT_V ALID(pDoc);/TODO:add draw code for native data hereddaline(pDC,100,100,400,100,RGB(255,0,0);ddaline(pDC,400,100,400,400,RGB(0,255,0);ddaline(pDC,400,400,100,400,RGB(0,0,255);ddaline(pDC,100,400,100,100,RGB(255,255,0);ddaline(pDC,100,100,400,400,RGB(255,0,255);ddaline(pDC,100,400,400,100,RGB(0,255,255);5编译、调试和运行程序,查看程序结果。2 2、以下是利于鼠标和字母键实现用户接口与交互式技术,请参照利用特殊键实现,写出其、以下是利于鼠标和字母键实现用户接口与交互式技术,请参照利用特殊键实现,写出其代码。代码。1OPENGL 中利用鼠标实现橡皮筋技术的例子#include int iPointNum=0;/已确定点的数目int x1=0,x2=0,y1=0,y2=0;/确定的点坐标int winWidth=400,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();gluOrtho2D(0.0,winWidth,0.0,winHeight);10void Display(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);if(iPointNum=1)glBegin(GL_LINES);/绘制直线段glVertex2i(x1,y1);glVertex2i(x2,y2);glEnd();glutSwapBuffers();/交换缓冲区void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse)if(button=GLUT_LEFT_BUTTON&action=GLUT_DOWN)if(iPointNum=0|iPointNum=2)iPointNum=1;x1=xMouse;y1=winHeight-yMouse;else iPointNum=2;x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();/指定窗口重新绘制if(button=GLUT_RIGHT_BUTTON&action=GLUT_DOWN)iPointNum=0;glutPostRedisplay();void PassiveMouseMove(GLint xMouse,GLint yMouse)if(iPointNum=1)x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();int main(int argc,char*argv)11glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);/使用双缓存及 RGB 模型glutInitWindowSize(400,300);glutInitWindowPosition(100,100);glutCreateWindow(橡皮筋技术);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);/指定窗口在整形回调函数glutMouseFunc(MousePlot);/指定鼠标响应函数glutPassiveMotionFunc(PassiveMouseMove);/指定鼠标移动响应函数Initial();glutMainLoop();return 0;2OPENGL 中利用键盘实现橡皮筋技术的例子#include int iPointNum=0;/已确定点的数目int x1=0,x2=0,y1=0,y2=0;/确定的点坐标int winWidth=400,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();gluOrtho2D(0.0,winWidth,0.0,winHeight);void Display(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);if(iPointNum=1)glBegin(GL_LINES);/绘制直线段glVertex2i(x1,y1);glVertex2i(x2,y2);glEnd();12glutSwapBuffers();/交换缓冲区void PassiveMouseMove(GLint xMouse,GLint yMouse)if(iPointNum=1)x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();void Key(unsigned char key,int x,int y)switch(key)case p:if(iPointNum=0|iPointNum=2)iPointNum=1;x1=x;y1=winHeight-y;else iPointNum=2;x2=x;y2=winHeight-y;glutPostRedisplay();break;default:break;int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);/使用双缓存及 RGB 模型glutInitWindowSize(400,300);glutInitWindowPosition(100,100);glutCreateWindow(橡皮筋技术);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);/指定窗口在整形回调函数glutKeyboardFunc(Key);/指定键盘响应函数glutPassiveMotionFunc(PassiveMouseMove);/指定鼠标移动响应函数Initial();13glutMainLoop();return 0;3 3、以下、以下 OPENGLOPENGL 实现拾取操作的例子,请掌握实现拾取操作的方法。实现拾取操作的例子,请掌握实现拾取操作的方法。#include#include stdio.hconst GLint pickSize=32;int winWidth=400,winHeight=300;void Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);void DrawRect(GLenum mode)if(mode=GL_SELECT)glPushName(1);/压入堆栈glColor3f(1.0f,0.0f,0.0f);glRectf(60.0f,50.0f,150.0f,150.0f);if(mode=GL_SELECT)glPushName(2);/压入堆栈glColor3f(0.0f,1.0f,0.0f);glRectf(230.0f,50.0f,330.0f,150.0f);if(mode=GL_SELECT)glPushName(3);/压入堆栈glColor3f(0.0f,0.0f,1.0f);glRectf(140.0f,140.0f,240.0f,240.0f);void ProcessPicks(GLint nPicks,GLuint pickBuffer)GLint i;GLuint name,*ptr;printf(选中的数目为%d 个n,nPicks);ptr=pickBuffer;for(i=0;inPicks;i+)name=*ptr;/选中图元在堆栈中的位置ptr+=3;/跳过名字和深度信息ptr+=name-1;/根据位置信息获得选中的图元名字if(*ptr=1)printf(你选择了红色图元n);if(*ptr=2)printf(你选择了绿色图元n);if(*ptr=3)printf(你选择了蓝色图元n);14ptr+;printf(nn);void ChangeSize(int w,int h)winWidth=w;winHeight=h;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,winWidth,0.0,winHeight);void Display(void)glClear(GL_COLOR_BUFFER_BIT);DrawRect(GL_RENDER);glFlush();void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse)GLuint pickBufferpickSize;GLint nPicks,vp4;if(button=GLUT_LEFT_BUTTON&action=GLUT_DOWN)glSelectBuffer(pickSize,pickBuffer);/设置选择缓冲区glRenderMode(GL_SELECT);/激活选择模式glInitNames();/初始化名字堆栈glMatrixMode(GL_PROJECTION);glPushMatrix();glLoadIdentity();glGetIntegerv(GL_VIEWPORT,vp);/定义一个 1010 的选择区域gluPickMatrix(GLdouble(xMouse),GLdouble(vp3-yMouse),10.0,10.0,vp);gluOrtho2D(0.0,winWidth,0.0,winHeight);DrawRect(GL_SELECT);/恢复投影变换glMatrixMode(GL_PROJECTION);glPopMatrix();glFlush();15/获得选择集并输出nPicks=glRenderMode(GL_RENDER);ProcessPicks(nPicks,pickBuffer);glutPostRedisplay();int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,300);glutInitWindowPosition(100,100);glutCreateWindow(拾取操作);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);glutMouseFunc(MousePlot);Initial();glutMainLoop();return 0;三、实验结果分析三、实验结果分析实验三实验三 圆和椭圆及其它基本图形的生成算法圆和椭圆及其它基本图形的生成算法一、实验目的一、实验目的1掌握和利用VC+实现Bresenham算法;2掌握利用OPENGL绘制简单多面体、二次及三次曲线的方法;3掌握利用OPENGL层次建模的方法。二、实验内容二、实验内容1用Visual C+实现圆和椭圆的Bresenham算法;2利用OPENGL绘制简单多面体、二次及三次曲线;3利用OPENGL层次建模1 1、Visual C+Visual C+实现圆的实现圆的BresenhamBresenham生成算法的参考程序如下,请在生成算法的参考程序如下,请在MFCMFC环境下实现环境下实现程序实现步骤:1 建立MidPointCircle工程文件;2 右击CMidPointCircleView类,建立成员函数void MidpointCircle(CDC*pDC,int x0,int y0,int r,COLORREF color)int CirPot(CDC*pDC,int x0,int y0,int x,int y,COLORREF color)(3)编写成员函数代码,程序如下:void CMidPointCircleView:MidpointCircle(CDC*pDC,int x0,int y0,int r,COLORREF color)int x,y;16float d;x=0;y=r;d=1.25-r;CirPot(pDC,x0,y0,x,y,color);while(x=y)if(dSetPixel(x0+x),(y0+y),color);pDC-SetPixel(x0+y),(y0+x),color);pDC-SetPixel(x0+y),(y0-x),color);pDC-SetPixel(x0+x),(y0-y),color);pDC-SetPixel(x0-x),(y0-y),color);pDC-SetPixel(x0-y),(y0-x),color);pDC-SetPixel(x0-y),(y0+x),color);pDC-SetPixel(x0-x),(y0+y),color);return 0;4编写OnDraw(CDC*pDC)函数,程序如下:void CMidPointCircleView:OnDraw(CDC*pDC)CMidPointCircleDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereMidpointCircle(pDC,100,100,10,RGB(255,0,0);MidpointCircle(pDC,500,300,60,RGB(255,255,0);6 编译、运行程序,查看结果。2 2、编写画椭圆法的扫描转换程序,请在、编写画椭圆法的扫描转换程序,请在MFCMFC 环境下实现环境下实现程序实现步骤:(1)建立MidPointEllise工程文件;(2)右击CMidPointElliseView类,建立成员函数17void MidpointEllise(CDC*pDC,int x0,int y0,int a,int b,COLORREF color)(3)编写成员函数代码,程序如下:void CMidPointEllipseView:MidpointEllise(CDC*pDC,int x0,int y0,int a,int b,COLORREFcolor)int x,y;float d1,d2;x=0;y=b;d1=b*b+a*a*(-b+0.25);pDC-SetPixel(x+x0,y+y0,color);while(b*b*(x+1)a*a*(y-0.5)if(d1SetPixel(x0+x,y0+y,color);pDC-SetPixel(x0+x,y0-y,color);pDC-SetPixel(x0-x,y0+y,color);pDC-SetPixel(x0-x,y0-y,color);/上半部分d2=(b*(x+0.5)*(b*(x+0.5)+(a*(y-1)*(a*(y-1)-(a*b)*(a*b);while(y0)if(d2SetPixel(x0+x,y0+y,color);pDC-SetPixel(x0+x,y0-y,color);pDC-SetPixel(x0-x,y0+y,color);pDC-SetPixel(x0-x,y0-y,color);18/下半部分(4)编写OnDraw()函数void CMidPointEllipseView:OnDraw(CDC*pDC)CMidPointEllipseDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data hereMidpointEllise(pDC,300,200,50,20,RGB(255,0,0);(5)编译、运行程序。3 3、用、用OPENGLOPENGL绘制简单多面体、二次及三次曲线的例子绘制简单多面体、二次及三次曲线的例子#include static GLsizei iMode=1;static GLfloat xRot=0.0f;/x方向旋转参数static GLfloat yRot=0.0f;/y方向旋转参数GLUquadricObj*obj;/二次曲面对象void Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);glColor3f(0.0f,0.0f,0.0f);obj=gluNewQuadric();gluQuadricDrawStyle(obj,GLU_LINE);/以线框方式绘制二次曲面对象void ChangeSize(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-1.5f,1.5f,-1.5f,1.5f);void Display(void)glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glRotatef(xRot,1.0f,0.0f,0.0f);/旋转图形glRotatef(yRot,0.0f,1.0f,0.0f);/旋转图形/指定需要绘制的图元19switch(iMode)case 1:glutWireTetrahedron();break;case 2:glutSolidTetrahedron();break;case 3:glutWireOctahedron();break;case 4:glutSolidOctahedron();break;case 5:glutWireSphere(1.0f,15,15);break;case 6:glutSolidSphere(1.0f,15,15);break;case 7:glutWireTeapot(1.0f);break;case 8:glutSolidTeapot(1.0f);break;case 9:gluSphere(obj,1.0f,15,15);break;case 10:gluCylinder(obj,1.0f,0.0f,1.0f,15,15);break;case 11:gluPartialDisk(obj,0.3f,0.8f,15,15,30.0f,260.0f);break;default:break;glFlush();void ProcessMenu(int value)iMode=value;glutPostRedisplay();void SpecialKeys(int key,int x,int y)if(key=GLUT_KEY_UP)xRot-=5.0f;if(key=GLUT_KEY_DOWN)xRot+=5.0f;if(key=GLUT_KEY_LEFT)yRot-=5.0f;if(key=GLUT_KEY_RIGHT)yRot+=5.0f;if(xRot 356.0f)xRot=0.0f;if(xRot 356.0f)yRot=0.0f;if(yRot -1.0f)yRot=355.0f;20glutPostRedisplay();int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,400);glutInitWindowPosition(100,100);glutCreateWindow(OpenGL模型绘制函数例如);/创建菜单并定义菜单回调函数int nGlutPolyMenu=glutCreateMenu(ProcessMenu);glutAddMenuEntry(线框正四面体,1);/创建GLUT多面体绘制菜单glutAddMenuEntry(实体正四面体,2);glutAddMenuEntry(线框正八面体,3);glutAddMenuEntry(实体正八面体,4);int nGlutCurveMenu=glutCreateMenu(ProcessMenu);/创建GLUT曲面绘制菜单glutAddMenuEntry(线框球面,5);glutAddMenuEntry(实体球面,6);glutAddMenuEntry(线框茶壶,7);glutAddMenuEntry(实体茶壶,8);int nGluCurveMenu=glutCreateMenu(ProcessMenu);/创建GLU曲面绘制菜单glutAddMenuEntry(线框球面,9);glutAddMenuEntry(线框圆锥面,10);glutAddMenuEntry(线框圆环面,11);int nMainMenu=glutCreateMenu(ProcessMenu);/创建主菜单glutAddSubMenu(GLUT多面体,nGlutPolyMenu);glutAddSubMenu(GLUT曲面,nGlutCurveMenu);glutAddSubMenu(GLU曲面,nGluCurveMenu);glutAttachMenu(GLUT_RIGHT_BUTTON);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);glutSpecialFunc(SpecialKeys);Initial();glutMainLoop();return 0;4 4、用、用 OPENGLOPENGL 实现绘制奥运五环标志实现绘制奥运五环标志21#include GLuint OlympicRings;void Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);OlympicRings=glGenLists(1);glNewList(OlympicRings,GL_COMPILE);glColor3f(1.0,1.0,0.0);glTranslatef(-22.0,0.0,0.0);glutSolidTorus(0.5,20.0,15,50);/绘制黄色环glColor3f(0.0,1.0,0.0);glTranslatef(44.0,0.0,0.0);glutSolidTorus(0.5,20.0,15,50);/绘制绿色环glColor3f(0.0,0.0,0.0);glTranslatef(-22.0,30.0,0.0);glutSolidTorus(0.5,20.0,15,50);/绘制黑色环glColor3f(0.0,0.0,1.0);glTranslatef(-42.0,0.0,0.0);glutSolidTorus(0.5,20.0,15,50);/绘制蓝色环glColor3f(1.0,0.0,0.0);glTranslatef(84.0,0.0,0.0);glutSolidTorus(0.5,20.0,15,50);/绘制红色环glEndList();void ChangeSize(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-70.0f,70.0f,-70.0f,70.0f);void Display(void)glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glCallList(OlympicRings);/调用显示列表glFlush();22int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,400);glutInitWindowPosition(100,100);glutCreateWindow(OpenGL模型绘制函数例如);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);Initial();glutMainLoop();return 0;三、实验结果分析三、实验结果分析实验四实验四 裁剪算法裁剪算法一、实验目的一、实验目的1掌握CohenSutherland线段裁剪算法,中点分割线段裁剪算法,Liang-Barsky裁剪算法。2 掌握反走样技术二、二、实验内容实验内容1实现Cohen-Sutherland线段裁剪算法;2实现中点分割线段裁剪算法;3实现Liang-Barsky裁剪算法;4实现反走样技术。1 1、Cohen-SutherlandCohen-Sutherland编码裁剪算法的程序设计,请在编码裁剪算法的程序设计,请在MFCMFC环境下实现,并理解代码。环境下实现,并理解代码。实验环境:Visual C+步骤1:创建Code_Clip工程文件;步骤2:在主程序的程序头部定义符号常量#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8步骤3:定义成员变量和

    注意事项

    本文(计算机图形学实验内容.pdf)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开