虚拟现实与系统仿真实验指导书Word格式文档下载.docx
《虚拟现实与系统仿真实验指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《虚拟现实与系统仿真实验指导书Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
HGLRCm_hRC;
添加包含OpenGL头文件的语句:
在COpenGLPlatView.cpp中添加代码
#include<
gl/gl.h>
gl/glu.h>
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,&
m_hRC=wglCreateContext(dc.m_hDC);
return0;
右击属性消息按钮选择WM_DESTROY添加
voidCOpenGLPlatView:
OnDestroy()函数中添加代码
//添加新的代码开始
wglMakeCurrent(NULL,NULL);
wglDeleteContext(m_hRC);
m_hRC=NULL;
右击属性消息按钮选择WM_SIZE添加
OnSize(UINTnType,intcx,intcy)函数中添加代码
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);
glColor3f(1.0f,0.0f,0.0f);
glRotated(60.0,1.0,1.0,1.0);
//茶壶
auxWireTeapot(3.0);
SwapBuffers(pDC->
m_hDC);
五:
实验结果
实验二OpenGL基本图形元素和模型变换
1.掌握二次曲面的绘制函数及其应用方法。
2.掌握基本实体模型的绘制函数及其应用方法。
1.学习二次曲面的绘制函数及其应用方法。
2.学习基本实体模型的绘制函数及其应用方法。
OpenGL提供了二次曲面和基本实体模型的绘制函数及其应用方法。
这些二次曲面和基本实体模型在OpenGL内部实现中实际上也是将它们离散分割成为大量的多边形,然后通过绘制多边形的方法实现对这些二次曲面和基本实体模型的绘制。
实验程序
实验步骤1~4与上述实验1相同
5在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:
wglMakeCurrent(pDC->
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轴方向层数)
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);
//四面体
//auxWireDodecahedron(4.0);
auxSolidDodecahedron(4.0);
//十二面体
//auxWireCone(2.0,4.0);
auxSolidCone(2.0,4.0);
//圆锥体
SwapBuffers(pDC->
//双缓冲
实验三光照与材质
实验目的:
1.掌握利用OpenGL编写绘制具有真实感效果的图形方法。
2.掌握添加光源和设置颜色材料属性的方法。
实验内容:
1.掌握添加光源的实现方法。
2.掌握设置颜色和材料属性的方法。
实验要求
通过本实验,掌握添加光源和设置颜色材料属性的方法,利用OpenGL编写绘制具有真实感效果的图形。
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);
//设置模型变换矩阵
//设置光源参数
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);
//红色
auxSolidTeapot(2.0);
SwapBuffers(pDC->
实验结果:
实验四纹理映射
1.掌握二维纹理映射方法。
2.掌握利用OpenGL编写绘制具有真实感效果的图形方法。
掌握二维纹理映射方法。
通过本实验,掌握掌握二维纹理映射方法。
glMaterialfv(GL_BACK,GL_AMBIENT,material_ambient);
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,//纹理宽度
sizeY,//纹理高度
0,//纹理边框宽度(或)
GL_RGB,//像素数据格式
GL_UNSIGNED_BYTE,//像素数据类型
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);
glTexCoord2d(1.0,0.0);
glColor3f(1.0,0.0,1.0);
glTexCoord2d(0.4,0.4);
glVertex3d(-2.5,-2.5,0);
glTexCoord2d(0.4,0.6);
glTexCoord2d(0.6,0.6);
glEnd();
实验五基于OpenGL的动画编程
1.掌握VC中的文档视图架构。
2.掌握利用OpenGL编写动画效果的方法。
掌握VC中的文档视图架构及动画程序编写。
通过本实验,掌握利用OpenGL编写动画效果的方法。
5.添加Star类
在Star.h中添加以下代码
#pragmaonce
gl/GL.h>
gl/GLU.h>
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);
//计算下一帧
~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_