(VR虚拟现实)虚拟现实与系统仿真实验指导书_第1页
(VR虚拟现实)虚拟现实与系统仿真实验指导书_第2页
(VR虚拟现实)虚拟现实与系统仿真实验指导书_第3页
(VR虚拟现实)虚拟现实与系统仿真实验指导书_第4页
(VR虚拟现实)虚拟现实与系统仿真实验指导书_第5页
已阅读5页,还剩14页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

虚拟现实与系统仿真实验指导书2013.2实验一基于MFC的基本OpenGL应用程序生成谢谢阅读一:实验目的1.熟悉VC++2005集成开发环境;2.熟悉基本MFC应用程序的生成;3.掌握基于MFC的基本OpenGL应用程序生成。二:实验内容1.建立基于MFC的基本OpenGL应用程序;2.配置应用程序,添加OpenGL链接库文件;3.建立OpenGL的基本环境。三:实验背景知识OpenGLOpenGL为计算机动画感谢阅读提供由图形生成图像帧的工具。MFC提供的图形用户界面程序设计技术可以编写人机交互程感谢阅读序,OpenGL技术可以进行各种图形绘制。四:实验步骤1.文件->新建->项目选择MFC应用程序输入名称OpenGLPlat感谢阅读2.右击项目名,选择属性,再选择链接器中的输入选项,附加依赖感谢阅读项:opengl32.lib;glu32.lib;glaux.lib感谢阅读3.选择类视图模式,右击View,再添加变量和头文件精品文档放心下载或直接在View头文件中添加变量:protected:HGLRCm_hRC;添加包含OpenGL头文件的语句:在COpenGLPlatView.cpp中添加代码#include<gl/gl.h>#include<gl/glu.h>#include<gl/glaux.h>4.右击属性消息按钮选择WM_CREATE添加在intCOpenGLPlatView::OnCreate(LPCREATESTRUCTlpCreateStruct)函数中添加代码谢谢阅读//添加新的代码开始CClientDCdc(this);PIXELFORMATDESCRIPTORpfd;memset(&pfd,0,sizeof(PIXELFORMATDESCRIPTOR));感谢阅读pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR);谢谢阅读pfd.nVersion=1;pfd.dwFlags=PFD_DRAW_TO_WINDOW|精品文档放心下载PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;pfd.iPixelType=PFD_TYPE_RGBA;精品文档放心下载pfd.cColorBits=24;pfd.cDepthBits=32;intpixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);感谢阅读SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);感谢阅读m_hRC=wglCreateContext(dc.m_hDC);感谢阅读return0;右击属性消息按钮选择WM_DESTROY添加voidCOpenGLPlatView::OnDestroy()函数中添加代码谢谢阅读//添加新的代码开始wglMakeCurrent(NULL,NULL);谢谢阅读wglDeleteContext(m_hRC);m_hRC=NULL;右击属性消息按钮选择WM_SIZE添加voidCOpenGLPlatView::OnSize(UINTnType,intcx,intcy)函数中添加代码谢谢阅读//添加新的代码开始CClientDCdc(this);wglMakeCurrent(dc.m_hDC,m_hRC);精品文档放心下载glMatrixMode(GL_PROJECTION);谢谢阅读glLoadIdentity();doubled=10;doublen=100;glOrtho(-cx/n,cx/n,-cy/n,cy/n,-d,d);谢谢阅读glMatrixMode(GL_MODELVIEW);精品文档放心下载glViewport(0,0,cx,cy);wglMakeCurrent(NULL,NULL);谢谢阅读5.在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:感谢阅读voidCMy1View::OnDraw(CDC*pDC)//把”/*pDC*/”改成pDC感谢阅读{COpenGLPlatDoc*pDoc=GetDocument();感谢阅读ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:在此处为本机数据添加绘制代码wglMakeCurrent(pDC->m_hDC,m_hRC);谢谢阅读glClearColor(1.0f,1.0f,1.0f,1.0f);谢谢阅读glClearDepth(1.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);谢谢阅读glEnable(GL_COLOR_MATERIAL);感谢阅读glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_AUTO_NORMAL);glEnable(GL_NORMALIZE);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);glMatrixMode(GL_MODELVIEW);感谢阅读glLoadIdentity();glColor3f(1.0f,0.0f,0.0f);谢谢阅读glRotated(60.0,1.0,1.0,1.0);//茶壶谢谢阅读auxWireTeapot(3.0);SwapBuffers(pDC->m_hDC);wglMakeCurrent(NULL,NULL);精品文档放心下载五:实验结果实验二OpenGL基本图形元素和模型变换一:实验目的1.掌握二次曲面的绘制函数及其应用方法。2.掌握基本实体模型的绘制函数及其应用方法。二:实验内容1.学习二次曲面的绘制函数及其应用方法。2.学习基本实体模型的绘制函数及其应用方法。三:实验背景知识OpenGL精品文档放心下载实体模型在OpenGL精品文档放心下载多边形的方法实现对这些二次曲面和基本实体模型的绘制。感谢阅读四:实验程序实验步骤1~4与上述实验1相同5在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:谢谢阅读wglMakeCurrent(pDC->m_hDC,m_hRC);谢谢阅读glMatrixMode(GL_MODELVIEW);精品文档放心下载//二次曲面glColor3f(1.0f,0.0f,0.0f);感谢阅读GLUquadric*qd=gluNewQuadric();//创建二次曲面对象精品文档放心下载gluQuadricDrawStyle(qd,GLU_FILL);//设置二次曲面对象绘制模式GLU_LINE;GLU_SILHOUETTE;GLU_POINT感谢阅读glLoadIdentity();glRotated(-105.0,1.0,0.0,0.0);感谢阅读glTranslated(-6.0,0.0,-2.0);精品文档放心下载gluCylinder(qd,2.0,1.0,4.0,30,4);//(圆台,下底面半径,上底面半径,圆台高度,绕z轴分割瓣数,感谢阅读绕z轴方向层数)glLoadIdentity();glTranslated(-6.0,0.0,-2.0);精品文档放心下载gluDisk(qd,1.0,2.0,30,4);//平面圆盘(,内圆半径,外圆半径,扇形瓣数,环的个数)精品文档放心下载//...gluPartialDisk(qd,1.0,2.0,10,4,0,75);//谢谢阅读始角,图形张开的角度)//...gluSphere(qd,2.0,30,6);//球(,球的半径,分割的瓣数,分割的层次)精品文档放心下载auxSolidTetrahedron(4.0);//实体模型auxWireTeapot();auxSolidTeapot();感谢阅读//auxWireSphere(3.0);auxSolidSphere(3.0);谢谢阅读//auxWireCube(4.0);auxSolidCube(4.0);感谢阅读//auxWireBox(3.0,4.0,5.0);auxSolidBox(3.0,4.0,5.0);感谢阅读//auxWireTorus(1.0,3.0);//圆环auxSolidTorus(1.0,3.0);精品文档放心下载//auxWireCylinder(2.0,4.0);auxSolidCylinder(2.0,4.0);精品文档放心下载//auxWireIcosahedron(4.0);auxSolidIcosahedron(4.0);//二十面体谢谢阅读//auxWireOctahedron(4.0);auxSolidOctahedron(4.0);//八面体感谢阅读//auxWireTetrahedron(4.0);auxSolidTetrahedron(4.0);//四面体感谢阅读//auxWireDodecahedron(4.0);auxSolidDodecahedron(4.0);//十二面体精品文档放心下载//auxWireCone(2.0,4.0);auxSolidCone(2.0,4.0);//圆锥体感谢阅读SwapBuffers(pDC->m_hDC);//双缓冲精品文档放心下载wglMakeCurrent(NULL,NULL);谢谢阅读实验三光照与材质一:实验目的:1.掌握利用OpenGL编写绘制具有真实感效果的图形方法。谢谢阅读2.掌握添加光源和设置颜色材料属性的方法。二:实验内容:1.掌握添加光源的实现方法。2.掌握设置颜色和材料属性的方法。三:实验要求OpenGL编写绘制具有真实感谢阅读感效果的图形。四:实验程序实验步骤1~4与上述实验1相同5在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:谢谢阅读wglMakeCurrent(pDC->m_hDC,m_hRC);精品文档放心下载glClearColor(1.0f,1.0f,1.0f,1.0f);感谢阅读glClearDepth(1.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);感谢阅读glEnable(GL_COLOR_MATERIAL);谢谢阅读glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_AUTO_NORMAL);glEnable(GL_NORMALIZE);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);//设置模型变换矩阵glMatrixMode(GL_MODELVIEW);谢谢阅读glLoadIdentity();//设置光源参数GLfloatlight_position[]={1.0f,1.0f,1.0f,0.0f};谢谢阅读GLfloatlight_ambient[]={0.2f,0.2f,0.2f,0.2f};谢谢阅读GLfloatlight_diffuse[]={0.5f,0.5f,0.2f,0.2f};感谢阅读GLfloatlight_specular[]={0.5f,0.5f,0.5f,0.2f};精品文档放心下载glLightfv(GL_LIGHT0,GL_POSITION,light_position);谢谢阅读glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);谢谢阅读glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);精品文档放心下载glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);谢谢阅读//设置材质参数GLfloatmaterial_ambient[]={0.2f,0.2f,0.2f,0.2f};感谢阅读GLfloatmaterial_diffuse[]={0.2f,0.8f,0.4f,0.8f};感谢阅读GLfloatmaterial_specular[]={0.2f,0.8f,0.4f,0.8f};精品文档放心下载GLfloatmaterial_emission[]={0.2f,0.2f,0.2f,1.0f};精品文档放心下载GLfloatmaterial_shiness[]={10.0f};谢谢阅读glMaterialfv(GL_BACK,GL_AMBIENT,material_ambient);//FRONT_AND_BACK感谢阅读glMaterialfv(GL_BACK,GL_DIFFUSE,material_diffuse);感谢阅读glMaterialfv(GL_BACK,GL_SPECULAR,material_specular);精品文档放心下载glMaterialfv(GL_BACK,GL_EMISSION,material_emission);感谢阅读glMaterialfv(GL_BACK,GL_SHININESS,material_shiness);感谢阅读glColor3f(1.0f,0.0f,0.0f);//红色谢谢阅读glRotated(60.0,1.0,1.0,1.0);精品文档放心下载auxSolidTeapot(2.0);SwapBuffers(pDC->m_hDC);//双缓冲谢谢阅读wglMakeCurrent(NULL,NULL);感谢阅读实验结果:实验四纹理映射一:实验目的1.掌握二维纹理映射方法。2.掌握利用OpenGL编写绘制具有真实感效果的图形方法。感谢阅读二:实验内容掌握二维纹理映射方法。三:实验要求通过本实验,掌握掌握二维纹理映射方法。四:实验程序实验步骤1~4与上述实验1相同5在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:谢谢阅读wglMakeCurrent(pDC->m_hDC,m_hRC);精品文档放心下载glClearColor(1.0f,1.0f,1.0f,1.0f);谢谢阅读glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);精品文档放心下载glEnable(GL_COLOR_MATERIAL);谢谢阅读glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_AUTO_NORMAL);glEnable(GL_NORMALIZE);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);glMatrixMode(GL_MODELVIEW);感谢阅读glLoadIdentity();//设置光源参数GLfloatlight_position[]={1.0f,1.0f,1.0f,0.0f};感谢阅读GLfloatlight_ambient[]={0.2f,0.2f,0.2f,0.2f};谢谢阅读GLfloatlight_diffuse[]={0.5f,0.5f,0.2f,0.2f};谢谢阅读GLfloatlight_specular[]={0.5f,0.5f,0.5f,0.2f};谢谢阅读glLightfv(GL_LIGHT0,GL_POSITION,light_position);精品文档放心下载glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);感谢阅读glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);精品文档放心下载glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);精品文档放心下载//设置材质参数GLfloatmaterial_ambient[]={0.2f,0.2f,0.2f,0.2f};感谢阅读GLfloatmaterial_diffuse[]={0.2f,0.8f,0.4f,0.8f};精品文档放心下载GLfloatmaterial_specular[]={0.2f,0.8f,0.4f,0.8f};精品文档放心下载GLfloatmaterial_emission[]={0.2f,0.2f,0.2f,1.0f};谢谢阅读GLfloatmaterial_shiness[]={10.0f};精品文档放心下载glMaterialfv(GL_BACK,GL_AMBIENT,material_ambient);//FRONT_AND_BACK谢谢阅读glMaterialfv(GL_BACK,GL_DIFFUSE,material_diffuse);感谢阅读glMaterialfv(GL_BACK,GL_SPECULAR,material_specular);精品文档放心下载glMaterialfv(GL_BACK,GL_EMISSION,material_emission);精品文档放心下载glMaterialfv(GL_BACK,GL_SHININESS,material_shiness);精品文档放心下载glRotated(80.0,1.0,1.0,1.0);精品文档放心下载AUX_RGBImageRec*picture=auxDIBImageLoad(_T("C:\\tsIcon.bmp"));//(此处图片路径为C盘根目录下)感谢阅读if(picture!=NULL){glEnable(GL_TEXTURE_2D);glPixelStorei(GL_UNPACK_ALIGNMENT,1);谢谢阅读glTexImage2D(GL_TEXTURE_2D,//二维纹理感谢阅读0,//纹理层次3,//颜色分量个数picture->sizeX,//纹理宽度picture->sizeY,//纹理高度0,//纹理边框宽度(或)GL_RGB,//像素数据格式GL_UNSIGNED_BYTE,//像素数据类型picture->data);//存储图象数据glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);//循环感谢阅读glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);精品文档放心下载glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);谢谢阅读glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);谢谢阅读glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);//GL_DECAL,GL_谢谢阅读}glBegin(GL_QUADS);glColor3f(0.0,1.0,0.0);glTexCoord2d(-2.0,-2.0);glVertex3d(-2.5,-2.5,3);感谢阅读glTexCoord2d(-2.0,2.0);glVertex3d(2.5,-2.5,3);感谢阅读glTexCoord2d(2.0,2.0);glVertex3d(2.5,2.5,3);谢谢阅读glTexCoord2d(2.0,-2.0);glVertex3d(-2.5,2.5,3);感谢阅读glColor3f(1.0,1.0,0.0);glTexCoord2d(0.0,0.0);glVertex3d(-2.5,2.5,0);精品文档放心下载glTexCoord2d(0.0,1.0);glVertex3d(2.5,2.5,0);感谢阅读glTexCoord2d(1.0,1.0);glVertex3d(2.5,2.5,3);谢谢阅读glTexCoord2d(1.0,0.0);glVertex3d(-2.5,2.5,3);精品文档放心下载glColor3f(1.0,0.0,1.0);glTexCoord2d(0.4,0.4);glVertex3d(-2.5,-2.5,0);精品文档放心下载glTexCoord2d(0.4,0.6);glVertex3d(-2.5,-2.5,3);感谢阅读glTexCoord2d(0.6,0.6);glVertex3d(-2.5,2.5,3);精品文档放心下载glTexCoord2d(0.4,0.4);glVertex3d(-2.5,2.5,0);精品文档放心下载glEnd();SwapBuffers(pDC->m_hDC);//双缓冲精品文档放心下载wglMakeCurrent(NULL,NULL);谢谢阅读实验五基于OpenGL的动画编程一:实验目的1.掌握VC中的文档视图架构。2.掌握利用OpenGL编写动画效果的方法。二:实验内容掌握VC中的文档视图架构及动画程序编写。三:实验要求通过本实验,掌握利用OpenGL编写动画效果的方法。精品文档放心下载四:实验程序实验步骤1~4与上述实验1相同5.添加Star类在Star.h中添加以下代码#pragmaonce#include<gl/GL.h>#include<gl/GLU.h>#include<gl/GLAux.h>classStar{public:Star(void);intm_n;intm_sign;//变形符:增加,-1:减少doublem_radiusCenter;doublem_radiusMiddle;doublem_radiusCorner;GLfloatm_redCenter,m_greenCenter,m_blueCenter;精品文档放心下载GLfloatm_redMiddle,m_greenMiddle,m_blueMiddle;感谢阅读GLfloatm_redCorner,m_greenCorner,m_blueCorner;感谢阅读GLdoublem_angle;//旋转角度GLdoublem_point[26][3];//每个顶点坐标值感谢阅读GLfloatm_color[26][3];//每个顶点颜色值谢谢阅读voidmb_adjustGLfloat(GLfloat&f,GLfloatmin,GLfloatmax);谢谢阅读voidmb_calculatePoint(void);//计算顶点坐标值谢谢阅读voidmb_draw(void);//绘制图形voidmb_nextFrame(void);//计算下一帧谢谢阅读public:~Star(void);};在Star.cpp中添加以下代码:#include"StdAfx.h"#include"Star.h"//构造函数:初始化各个成员变量Star::Star(void){m_radiusCenter=2.0;//中心球半径感谢阅读m_radiusMiddle=2.828;//中间球半径,这里2×sqrt(2)≈2.828精品文档放心下载m_radiusCorner=3.464;//角上球半径,这里2×sqrt(3)≈3.464谢谢阅读m_redCenter=1.0f;//中心球点颜色m_greenCenter=0.0f;m_blueCenter=1.0f;m_redMiddle=0.0f;//中间球点颜色m_greenMiddle=1.0f;m_blueMiddle=0.0f;m_redCorner=0.0f;//角上球点颜色m_greenCorner=0.0f;m_blueCorner=1.0f;m_angle=45.0;//旋转角度mb_calculatePoint();m_n=0;//变形计数器m_sign=1;//变形符号:1:增加;-1:减小感谢阅读}//构造函数Star结束//析构函数Star::~Star(void){}//析构函数~Star结束//值调整函数:强制使得参数f的值位于区间[min,max]内谢谢阅读voidStar::mb_adjustGLfloat(GLfloat&f,GLfloatmin,GLfloatmax)谢谢阅读{if(f<min)f=min;if(f>max)f=max;}//函数mb_adjustGLfloat结束//计算顶点的坐标值和颜色值voidStar::mb_calculatePoint(void)精品文档放心下载{inti,j;intid1[]={0,2,6,8,1,3,5,7};感谢阅读intid2[]={9,11,14,16,10,12,13,15};谢谢阅读intsign1[]={-1,1,-1,1,0,-1,1,0};精品文档放心下载intsign2[]={1,1,-1,-1,1,0,0,-1};感谢阅读for(i=0,j=4;i<4;i++,j++){//下面0.577是“sqrt(3)/3”的近似值谢谢阅读m_point[id1[i]][0]=0.577*m_radiusCorner*sign1[i];精品文档放心下载m_point[id1[i]][1]=0.577*m_radiusCorner*sign2[i];精品文档放心下载m_point[id1[i]][2]=0.577*m_radiusCorner;精品文档放心下载m_color[id1[i]][0]=m_redCorner;感谢阅读m_color[id1[i]][1]=m_greenCorner;感谢阅读m_color[id1[i]][2]=m_blueCorner;谢谢阅读//下面0.707是“sqrt(2)/2”的近似值m_point[id1[j]][0]=0.707*m_radiusMiddle*sign1[j];精品文档放心下载m_point[id1[j]][1]=0.707*m_radiusMiddle*sign2[j];谢谢阅读m_point[id1[j]][2]=0.707*m_radiusMiddle;谢谢阅读m_color[id1[j]][0]=m_redMiddle;精品文档放心下载m_color[id1[j]][1]=m_greenMiddle;精品文档放心下载m_color[id1[j]][2]=m_blueMiddle;感谢阅读}//for循环结束m_point[4][0]=0.0;m_point[4][1]=0.0;m_point[4][2]=m_radiusCenter;精品文档放心下载m_color[4][0]=m_redCenter;精品文档放心下载m_color[4][1]=m_greenCenter;精品文档放心下载m_color[4][2]=m_blueCenter;感谢阅读for(i=9;i<17;i++)m_point[i][2]=0.0;for(i=0,j=4;i<4;i++,j++){//下面0.707是“sqrt(2)/2”的近似值感谢阅读m_point[id2[i]][0]=0.707*m_radiusMiddle*sign1[i];感谢阅读m_point[id2[i]][1]=0.707*m_radiusMiddle*sign2[i];精品文档放心下载m_color[id2[i]][0]=m_redMiddle;感谢阅读m_color[id2[i]][1]=m_greenMiddle;感谢阅读m_color[id2[i]][2]=m_blueMiddle;谢谢阅读m_point[id2[j]][0]=m_radiusCenter*sign1[j];感谢阅读m_point[id2[j]][1]=m_radiusCenter*sign2[j];感谢阅读m_color[id2[j]][0]=m_redCenter;谢谢阅读m_color[id2[j]][1]=m_greenCenter;谢谢阅读m_color[id2[j]][2]=m_blueCenter;感谢阅读}//for循环结束for(i=0,j=17;i<9;i++,j++){m_point[j][0]=m_point[i][0];谢谢阅读m_point[j][1]=m_point[i][1];谢谢阅读m_point[j][2]=-m_point[i][2];精品文档放心下载m_color[j][0]=m_color[i][0];谢谢阅读m_color[j][1]=m_color[i][1];谢谢阅读m_color[j][2]=m_color[i][2];感谢阅读}//for循环结束}//函数mb_calculatePoint结束//绘制图形voidStar::mb_draw(void){inti,j,k,m;intid[3][8]={{0,0,1,4,3,6,4,8},//上表面三角形映射关系精品文档放心下载{3,4,4,5,6,7,7,5},{4,1,2,2,4,4,8,4}};intface[4][9]={{0,1,2,9,10,11,17,18,19},//侧面与表面的顶点映射关系精品文档放心下载{0,3,6,9,12,14,17,20,23},{6,7,8,14,15,16,23,24,25},精品文档放心下载{8,5,2,16,13,11,25,22,19}};glBegin(GL_TRIANGLES);for(i=0;i<8;i++)//上表面for(j=0;j<3;j++){m=id[j][i];glColor3f(m_color[m][0],m_color[m][1],m_color[m][2]);谢谢阅读glVertex3d(m_point[m][0],m_point[m][1],m_point[m][2]);精品文档放心下载}//for循环结束for(k=0;k<4;k++)//四个侧面for(i=0;i<8;i++)for(j=0;j<3;j++){m=face[k][id[j][i]];glColor3f(m_color[m][0],m_color[m][1],m_color[m][2]);谢谢阅读glVertex3d(m_point[m][0],m_point[m][1],m_point[m][2]);感谢阅读}//for循环结束for(i=0;i<8;i++)//下表面for(j=0;j<3;j++){m=id[j][i]+17;glColor3f(m_color[m][0],m_color[m][1],m_color[m][2]);感谢阅读glVertex3d(m_point[m][0],m_point[m][1],m_point[m][2]);谢谢阅读}//for循环结束glEnd();}//函数mb_draw结束//计算下一帧旋转角度以及顶点的坐标值和颜色值voidStar::mb_nextFrame(void)感谢阅读{intnMax=100;doubled=1.0/nMax;m_n+=m_sign;if(m_n>nMax)m_sign=-1;if(m_n<0)m_sign=1;m_radiusCenter+=(d*m_sign*1.0);感谢阅读m_radiusMiddle-=(d*m_sign*2.0);谢谢阅读m_radiusCorner+=(d*m_sign*3.0);感谢阅读GLfloatdf=1.0f/nMax;m_redCenter-=(df*m_sign);//中心球点颜色谢谢阅读mb_adjustGLfloat(m_redCenter,0.0f,1.0f);谢谢阅读m_blueCenter-=(df*m_sign);谢谢阅读mb_adjustGLfloat(m_blueCenter,0.0f,1.0f);精品文档放心下载m_redCorner+=(df*m_sign);//角上球点颜色谢谢阅读mb_adjustGLfloat(m_redCorner,0.0f,1.0f);精品文档放心下载m_blueCorner=1.0f-m_redCorner;谢谢阅读m_angle+=1.0;if(m_angle>360)m_angle=0.0;mb_calculatePoint();}//函数mb_nextFrame结束6.在COpenGLPlatView类开头添加#include"Star.h"在view中添加一个WM_TIMER函数voidCOpenGLPlatView::OnTimer(UINT_PTRnIDEvent)精品文档放心下载{//TODO:在此添加消息处理程序代码和/或调用默认值谢谢阅读COpenGLPlatDoc*pDoc=GetDocument();精品文档放心下载ASSERT_VALID(pDoc);if(!pDoc)return;pDoc->m_star.mb_nextFrame();谢谢阅读Invalidate();CView::OnTimer(nIDEvent);}在COpenGLPlatDoc类中添加m_star变量:精品文档放心下载public:Starm_star;7.在view中的OnCreate函数中添加时间触发:精品文档放心下载intCOpenGLPlatView::OnCreate(LPCREATESTRUCTlpCreateStruct)谢谢阅读{if(CView::OnCreate(lpCreateStruct)==-1)精品文档放心下载return-1;//TODO:在此添加您专用的创建代码………..……….SetTimer(1,33,NULL);return0;}8.在view中的OnDestroy函数中添加代码:精品文档放心下载KillTimer(1);9.在OpenGLPlatView.cpp中OnDraw函数中添加以下代码精品文档放心下载voidCMy4View::OnDraw(CDC*pDC)精品文档放心下载{CMy4Doc*pDoc=GetDocument();谢谢阅读ASSERT_VALID(pDoc);if(!pDoc)return;wglMakeCurrent(pDC->m_hDC,m_hRC);谢谢阅读glClearColor(1.0f,1.0f,1.0f,1.0f);谢谢阅读glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);感谢阅读glEnable(GL_COLOR_MATERIAL);感谢阅读glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_AUTO_NORMAL);glEnable(GL_NORMALIZE);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);glMatrixMode(GL_MODELVIEW);谢谢阅读glLoadIdentity();//设置光源参数GLfloatlight_position[]={1.0f,1.0f,1.0f,0.0f};精品文档放心下载GLfloatlight_ambient[]={0.2f,0.2f,0.2f,0.2f};精品文档放心下载GLfloatlight_diffuse[]={0.5f,0.5f,0.2f,0.2f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论