虚拟现实大作业说明书.doc_第1页
虚拟现实大作业说明书.doc_第2页
虚拟现实大作业说明书.doc_第3页
虚拟现实大作业说明书.doc_第4页
虚拟现实大作业说明书.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

成绩 南京工程学院虚拟现实与系统仿真课程大作业说明书题 目 鼠标控制变形的三维星状图形 班 级 多媒体081班 学 生 姓 名 _ 学 号 一、 作业内容简介 编写变形的三维星状图形,并用鼠标控制其变形速度。二、 流程介绍(需包含主要步骤截图)1、 文件-新建-项目 打开新建项目对话框,在项目类型中选择MFC,在模板中选择MFC应用程序,然后再下方名称处输入名称OpenGLPlat,选择恰当存储位置,见下图。2、 右击项目名OpenGLPlat,选择属性,再在配置属性选择链接器中的输入选项,然后在附加依赖项中添加opengl32.lib glu32.lib glaux.lib,见下图。3、 选择类视图模式,右击类COpenGLPlatView,在弹出的对话框中选择添加-添加变量,然后添加public访问权限的int型变量lpCreateStruct,见下图。4、同3步骤添加protected访问权限的HGLRC类型变量m_hRC。5、在COpenGLPlatView.cpp中添加代码#include #include #include 6、选择类视图模式,右击类COpenGLPlatView,单击属性,单击消息按钮,在消息WM_CREATE处添加OnCreate响应函数,见下图,并补充程序。7、同4步骤添加OnDestroy、OnSize、OnEraseBkgnd、OnTimer响应函数,并补充程序。8、右击项目名OpenGLPlat,添加类Star,见下图,并在Star.h和Star.cpp中补充程序以绘制变形的三维星状图形。9、在OpenGLPlatDoc.h中添加代码如下,并同3步骤添加public访问权限的Star类型变量m_star。#include Star.h 10、同3步骤添加public访问权限的int类型变量k和Flag。11、同4步骤添加OnLButtonDown响应函数,并补充程序实现用鼠标控制变形的三维星状图形变形速度。三、关键代码1、在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(); / 设置光源参数 GLfloat light_position = 1.0f, 1.0f, 1.0f, 0.0f ; GLfloat light_ambient = 0.2f, 0.2f, 0.2f, 0.2f ; GLfloat light_diffuse = 0.5f, 0.5f, 0.5f, 0.2f ; GLfloat light_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); / 设置物体的材料参数GLfloat material_ambient = 0.2f, 0.2f, 0.2f, 0.2f ;GLfloat material_diffuse = 0.2f, 0.8f, 0.4f, 0.8f ; GLfloat material_specular = 0.2f, 0.8f, 0.4f, 0.8f ; GLfloat material_emission = 0.2f, 0.2f, 0.2f, 1.0f ; GLfloat material_shininess = 10.0f ; glMaterialfv(GL_FRONT, GL_AMBIENT, material_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, material_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, material_specular); glMaterialfv(GL_FRONT, GL_EMISSION, material_emission); glMaterialfv(GL_FRONT, GL_SHININESS,material_shininess); glRotated(pDoc-m_star.m_angle, 1.0, 1.0, 1.0); pDoc-m_star.mb_draw( ); SwapBuffers(pDC-m_hDC); wglMakeCurrent(NULL, NULL);2、在OnCreate函数中添加如下关键代码: CClientDC dc(this); PIXELFORMATDESCRIPTOR pfd; memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR); pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | / 表明绘制在窗口上 PFD_SUPPORT_OPENGL | / 表明支持OpenGL PFD_DOUBLEBUFFER; / 表明支持采用双缓存机制 pfd.iPixelType = PFD_TYPE_RGBA; / 表明颜色格式为(R, G, B, alpha) pfd.cColorBits = 24; / 表明颜色表示的位数,不计表示Alpha的位数 pfd.cDepthBits = 32; / 表明深度缓冲区(z-buffer)的深度位数 int pixelFormat = ChoosePixelFormat(dc.m_hDC, &pfd); SetPixelFormat(dc.m_hDC, pixelFormat, &pfd); m_hRC = wglCreateContext(dc.m_hDC); SetTimer(1,50,NULL);3、在OnSize函数中添加如下关键代码: CClientDC dc(this); wglMakeCurrent(dc.m_hDC, m_hRC); glMatrixMode(GL_PROJECTION); glLoadIdentity( ); double d=10; double n=100; glOrtho(-cx/n, cx/n, -cy/n, cy/n, -d, d); glMatrixMode(GL_MODELVIEW); glViewport(0, 0, cx, cy); wglMakeCurrent(NULL, NULL); / 释放相关资源4、在OnTimer函数中添加如下关键代码: COpenGLPlatDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDoc-m_star.mb_nextFrame( ); Invalidate( );5、在OnDestroy函数中添加如下关键代码: wglMakeCurrent(NULL, NULL); wglDeleteContext(m_hRC); m_hRC=NULL; KillTimer(1);6、在OnLButtonDown函数中添加如下关键代码:if(Flag=0)SetTimer(1,10,NULL);/加速,原来Flag=1;elseSetTimer(1,100,NULL);/减速Flag=0;四、运行结果 五、本作业涉及知识点总结让OpenGL进行光照计算,必须明确指出光照是否有效或无效。如果光照无效,OpenGL只是简单地将当前颜色映射到当前顶点上去,而不进行法向、光源、材质等复杂计算。要使光照有效,首先得启动光照,即: glEnable(GL_LIGHTING); 若使光照无效,则调用 gDisable(GL_LIGHTING) 可关闭当前光照。允许进行光照计算后,需要设置光照模型,影响光照模型的三个参数是通过glLightfv函数中设置的。在设置了光照模型之后,我们还需要设置绘制物体的材质属性,使多边形能够反射光。设置材质属性的方法有两种,一种是在绘制每个多边形

温馨提示

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

最新文档

评论

0/150

提交评论