计算机动画课程设计.docx
- 文档编号:5250372
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:13
- 大小:156.46KB
计算机动画课程设计.docx
《计算机动画课程设计.docx》由会员分享,可在线阅读,更多相关《计算机动画课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
计算机动画课程设计
计算机动画课程设计制作报告
学院:
明德学院
专业:
计算机科学与技术
班级:
计科091
学生姓名:
宋青云
学号:
092003111142
指导教师:
班兴建
2012年12月1日
计算机动画制作报告
一、计算机动画概述
随着计算机越来越广泛的应用于各行各业,计算机动画也深入了我们的各个领域,计算机动画是借助于计算机生成一系列的图像并且可以动态播放的计算机技术。
在这里的设计报告中我主要运用了OpenGL(开放图形库)这个软件工具包,在VS2005环境下基于MFC开发OpenGL应用程序。
二、题目问题细节描述
图形的真实感绘制首先需要设置光源.如果在现在生活中没有光源,则将一片漆黑;如果在OpenGL编程中没有加上光源,则不会产生立体的图形效果,物体的绘制效果还同物体本事的颜色和材料属性密切相关。
OpenGL为了计算物体表面的颜色需要物体表面各个点的法向量。
另外,OpenGL还需要判断物体之间以及物体自身的遮挡关系,从而显示物体的可见部分。
三、环境搭建
开发环境:
VC++或VS2005
OpenGL添加:
OpenGL32.Lib;GIU32.Lib;GIAux.Lib
功能描述:
核心库:
OpenGL32.Lib;
工具库:
GIU32.Lib;
辅助库:
GIAux.Lib
四、编译过程
4.1项目创建
项目名称:
二十面体的实体模型
4.2关键引用
#include"gl/gl.h"
#include"gl/glu.h"
#include"gl/glaux.h"
4.3详细代码
//123View.cpp:
implementationoftheCMy123Viewclass
//
#include"stdafx.h"
#include"123.h"
#include"123Doc.h"
#include"123View.h"
#include"gl/gl.h"
#include"gl/glu.h"
#include"gl/glaux.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CMy123View
IMPLEMENT_DYNCREATE(CMy123View,CView)
BEGIN_MESSAGE_MAP(CMy123View,CView)
//{{AFX_MSG_MAP(CMy123View)
ON_WM_DESTROY()
ON_WM_CREATE()
ON_WM_SIZE()
//}}AFX_MSG_MAP
//Standardprintingcommands
ON_COMMAND(ID_FILE_PRINT,CView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:
:
OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMy123Viewconstruction/destruction
CMy123View:
:
CMy123View()
{
//TODO:
addconstructioncodehere
}
CMy123View:
:
~CMy123View()
{
}
BOOLCMy123View:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCView:
:
PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
//CMy123Viewdrawing
voidCMy123View:
:
OnDraw(CDC*pDC)
{
CMy123Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
//TODO:
adddrawcodefornativedatahere
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_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.5f,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_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);
glLoadIdentity();
glRotated(45.0,1.0,0.0,0.0);
glColor3f(20.0f,0.5f,0.8f);
auxSolidIcosahedron(4.0);
SwapBuffers(pDC->m_hDC);
wglMakeCurrent(NULL,NULL);
}
/////////////////////////////////////////////////////////////////////////////
//CMy123Viewprinting
BOOLCMy123View:
:
OnPreparePrinting(CPrintInfo*pInfo)
{
//defaultpreparation
returnDoPreparePrinting(pInfo);
}
voidCMy123View:
:
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addextrainitializationbeforeprinting
}
voidCMy123View:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addcleanupafterprinting
}
/////////////////////////////////////////////////////////////////////////////
//CMy123Viewdiagnostics
#ifdef_DEBUG
voidCMy123View:
:
AssertValid()const
{
CView:
:
AssertValid();
}
voidCMy123View:
:
Dump(CDumpContext&dc)const
{
CView:
:
Dump(dc);
}
CMy123Doc*CMy123View:
:
GetDocument()//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMy123Doc)));
return(CMy123Doc*)m_pDocument;
}
#endif//_DEBUG
/////////////////////////////////////////////////////////////////////////////
//CMy123Viewmessagehandlers
voidCMy123View:
:
OnDestroy()
{
CView:
:
OnDestroy();
//TODO:
Addyourmessagehandlercodehere
wglMakeCurrent(NULL,NULL);
wglDeleteContext(m_hRC);
m_hRC=NULL;
}
intCMy123View:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
if(CView:
:
OnCreate(lpCreateStruct)==-1)
return-1;
//TODO:
Addyourspecializedcreationcodehere
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;
}
voidCMy123View:
:
OnSize(UINTnType,intcx,intcy)
{
CView:
:
OnSize(nType,cx,cy);
//TODO:
Addyourmessagehandlercodehere
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.1编译的颜色
程序代码为:
glColor3f(20.0f,0.5f,0.8f);
调整参数:
glColor3f(1.0f,0.5f,0.8f);
调整后运行结果如图所示:
5.1旋转的角度
程序代码为:
glRotated(45.0,1.0,0.0,0.0);
调整参数:
glRotated(45.0,0.5,1.5,0.0);
调整后运行结果如图所示:
5.3实体线路或者图形的设置
实体模型代码:
auxSolidIcosahedron(4.0);
线框模型代码:
auxWireIcosahedron(4.0);
调整后运行结果如图所示:
5.4其他模型代码
如圆环的线框模型:
auxWireTorus(1.0,3.0);
运行结果为:
六、心得与体会:
在还没有接触这一门课以前对计算机动画的认识还只是肤浅的认识,认为动画都是由一些软件制作而成的,学了后才知道动画是可以通过一些算法来完成的。
在这门课中可以说是受益匪浅,尤其在动手制作的时候遇到了很多的困难和问题,因为以前并没有解除太多的算法,现在做起来必然有些吃力。
但是在逐渐的学习后发现OpenGL应用程序的开对初学计算动画算法与编程基础的我们来说,还是比较容易掌握的。
OpenGL应用博大精深,图形实体的参数配置较难,许多参数对于初学的我们还不是太了解,在反复调整运行后,大概能掌握一些。
在整个过程中,我发现问题,和同学交流,同时也发现同学的补足,各自发现不足,取长补短,使各自在学习中进步,我相信以后会学的更好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 动画 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)