计算机图形学课程设计报告1.docx
- 文档编号:4689535
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:32
- 大小:39.98KB
计算机图形学课程设计报告1.docx
《计算机图形学课程设计报告1.docx》由会员分享,可在线阅读,更多相关《计算机图形学课程设计报告1.docx(32页珍藏版)》请在冰豆网上搜索。
计算机图形学课程设计报告1
目录
1、课程设计目的…………………………………………………1
2、系统功能介绍…………………………………………………1
3、程序代码和分析………………………………………………2
4、总结……………………………………………………………4
5、参考文献………………………………………………………4
6.源程序………………………………………………………4
计算机图形学课程设计报告
1.课程设计目的
本课程主要内容包括计算机图形学的研究内容、发展与应用,图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面,三维实体造型,分形几何造型,分形艺术,隐藏面消除,光照模型,颜色模型,光线跟踪,纹理细节模拟,常用的计算机动画技术和软件等。
在学期期末时按课程要求进行运动,提高学生对计算机图形学知识的了解与运用技巧同时通过此次课程设计提高动手实践能力与学习分析能力这就是本次的课程设计的目的。
2.课程设计描述及要求
此次课程设计的课题为利用VC++6.0和插件OPENGL制作三维模型。
本设计主要通过建立MFC工程,在工程里建立一个三维模型然后再进行旋转,飞行等运动,来建立一个动态的三维模型。
主要步骤如下:
1:
工程的建立
2:
三维模型的建立和映射
3:
三维模型的运动
一:
工程的建立
1:
系统配置。
先对机子安装VC++6.0.在建立工程前,本实验需要添加OPENGL插件,故需要在Windows环境下安装GLUT
步骤如下:
1、将下载的压缩包解开,将得到5个文件
2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。
把解压得到的glut.h放到这个文件夹。
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
(典型的位置为:
C:
\Windows\System32)然后建立一个OpenGL工程测试
这里以VisualStudio2005为例。
选择File->New->Project,然后选择Win32 Console Application,选择一个名字,然后按OK。
在谈出的对话框左边点Application Settings,找到Empty project并勾上,选择Finish。
然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c来作为文件结尾。
2:
建立工程。
新建一个MFC文件。
命名为plmy2.而其中的三维建模画图主要程序在程序plmyView.cpp附录下,主要步骤如下:
建立模型------着色----旋转------飞机飞行
1设置背景
voidCPlmyView:
:
OnDraw(CDC*pDC)
{
CPlmyDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
///////////////////////////////////////
staticBOOLbBusy=FALSE;
if(bBusy)return;
bBusy=TRUE;
glClearColor(0.2f,0.2f,0.5f,1.0f);//设置背景颜色
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色缓存和深度缓存
glMatrixMode(GL_MODELVIEW);//glMatrixMode设置当前矩阵模式
glLoadIdentity();//将当前的用户坐标系的原点移到了屏幕中心:
类似于一个复位操作
mydraw();
glFinish();
SwapBuffers(wglGetCurrentDC());
bBusy=FALSE;
////////////////////////////////////////
}
2画挂饰运动的方法
voidCPlmyView:
:
myplane()
{
glPushMatrix();//入栈
glTranslatef(ABS(rx)*cosf((rangplane2+rangx)*6.283f/360.0f),
0.0f,
-ABS(rx)*sinf((rangplane2+rangx)*6.283f/360.0f));//移动
glRotated((rangplane2+rangx),0.0,1.0,0.0);//y
glRotated(-90.0f,0.0,1.0,0.0);//y
glRotated(rangx,1.0,0.0,0.0);//绕x旋转
glShadeModel(GL_SMOOTH);//放大缩小
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
for(inti=0;i<2;i++){
glBegin(GL_TRIANGLE_FAN);//画图
glColor3f(1.0f,0.5f,1.0f);
glVertex3f(-0.18f,0.0f,0.0f);
glColor3f(1.0f,0.5f,1.0f);
glVertex3f(0.1f,0.0f,-0.1f);
glColor3f(1.0f,0.8f,1.0f);
glVertex3f(0.09f,0.0f,-0.01f);
glColor3f(1.0f,0.3f,1.0f);
glVertex3f(0.08f,-0.05f,0.0f);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(0.09f,0.0f,0.01f);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(0.1f,0.0f,0.1f);
glEnd();
glShadeModel(GL_FLAT);
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
};
glPopMatrix();
}
3:
voidCPlmyView:
:
plane2()//画飞机图
4:
voidCPlmyView:
:
fly()//飞机飞翔方法
5:
voidCPlmyView:
:
OnTimer(UINTnIDEvent)//设置触发函数
图片如下:
3.系统开发环境
开发工具:
MicrosoftVisualBasic6.0
开发环境:
Windows2000Server
操作系统:
MicrosoftWindowsXP
总结
由于属于初学VC且时间有限,所以对于前台的制作难免也诸多的不足,很多东西都要马上学习查资料并进行初步调试即拿出来使用。
而制作出的前台功能单一结构简单是一大缺憾,没有时间进行精加工与进一步的调试补全源程序的不足之处使之更加完善。
不过通过这次的课程设计,使我们的自学能力与动手实践能力得到相当大的提高,编程并不是靠看书本就能学会的,而是要靠一步步的调试一条条指令的修改试运行中学习进步的,盲目的看书并不能提高自己水平。
从这次的课程设计我们知道了自己的不足,学习的知识不够充分,对于现有资源材料的利用学习率太低等方面的缺点,对今后的学习和工作进步都有非常大的帮助。
参考文献:
《计算机图形学》罗笑男,王若梅
《C++面向对象程序设计》徐孝凯,张纪勇主编
《交互式计算机图形学-自顶向下方法与OpenGL应用》(美)安杰尔著
附录:
源程序代码清单
SourceFiles:
MainFrm.cpp
plmy.cpp
plmy.rc
plmyDoc.cpp
plmyView.cpp
StdAfx.cpp
//MainFrm.cpp:
implementationoftheCMainFrameclass
//
#include"stdafx.h"
#include"plmy.h"
#include"MainFrm.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_GETMINMAXINFO()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
staticUINTindicators[]=
{
ID_SEPARATOR,//statuslineindicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
//CMainFrameconstruction/destruction
CMainFrame:
:
CMainFrame()
{
//TODO:
addmemberinitializationcodehere
fullscreenkey=FALSE;
}
CMainFrame:
:
~CMainFrame()
{
}
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
if(CFrameWnd:
:
OnCreate(lpCreateStruct)==-1)
return-1;
//if(!
m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP
if(!
m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|CBRS_TOP
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!
m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failedtocreatetoolbar\n");
return-1;//failtocreate
}
//if(!
m_wndStatusBar.Create(this)||
if(!
m_wndStatusBar.Create(this,WS_CHILD|CBRS_BOTTOM)||
!
m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failedtocreatestatusbar\n");
return-1;//failtocreate
}
//定义状态栏
if(m_wndStatusBar){
m_wndStatusBar.SetPaneInfo(0,0,SBPS_STRETCH,50);
m_wndStatusBar.SetPaneInfo(1,0,0,50);
m_wndStatusBar.SetPaneInfo(2,0,SBPS_STRETCH,50);
m_wndStatusBar.SetPaneInfo(3,0,SBPS_STRETCH,50);
};
//全拼显示
fullscreenkey=TRUE;
CRectwinme,clientme;
GetWindowRect(&winme);
RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&clientme);
ClientToScreen(&clientme);
intfullwide=GetSystemMetrics(SM_CXSCREEN);
intfullhide=GetSystemMetrics(SM_CYSCREEN);
mefullscreen.left=winme.left-clientme.left;
mefullscreen.top=winme.top-clientme.top;
mefullscreen.right=winme.right-clientme.right+fullwide;
mefullscreen.bottom=winme.bottom-clientme.bottom+fullhide;
WINDOWPLACEMENTwinfull;
winfull.length=sizeof(WINDOWPLACEMENT);
winfull.flags=0;
winfull.showCmd=SW_SHOWNORMAL;
winfull.rcNormalPosition=mefullscreen;
SetWindowPlacement(&winfull);
//TODO:
Deletethesethreelinesifyoudon'twantthetoolbarto
//bedockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return0;
}
BOOLCMainFrame:
:
PreCreateWindow(CREATESTRUCT&cs)
{
if(!
CFrameWnd:
:
PreCreateWindow(cs))
returnFALSE;
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnTRUE;
}
/////////////////////////////////////////////////////////////////////////////
//CMainFramediagnostics
#ifdef_DEBUG
voidCMainFrame:
:
AssertValid()const
{
CFrameWnd:
:
AssertValid();
}
voidCMainFrame:
:
Dump(CDumpContext&dc)const
{
CFrameWnd:
:
Dump(dc);
}
#endif//_DEBUG
/////////////////////////////////////////////////////////////////////////////
//CMainFramemessagehandlers
voidCMainFrame:
:
xyshow(intx,inty)
{
CStringstrsa;
if(m_wndStatusBar){
m_wndStatusBar.SetPaneText(1,"");
strsa.Format("x=%d",x);
m_wndStatusBar.SetPaneText(2,strsa);
strsa.Format("y=%d",y);
m_wndStatusBar.SetPaneText(3,strsa);
};
}
voidCMainFrame:
:
OnGetMinMaxInfo(MINMAXINFOFAR*lpMMI)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
if(fullscreenkey)
{
lpMMI->ptMaxSize.x=mefullscreen.Width();
lpMMI->ptMaxSize.y=mefullscreen.Height();
lpMMI->ptMaxPosition.x=mefullscreen.left;
lpMMI->ptMaxPosition.y=mefullscreen.top;
lpMMI->ptMaxTrackSize.x=mefullscreen.Width();
lpMMI->ptMaxTrackSize.y=mefullscreen.Height();
}
CFrameWnd:
:
OnGetMinMaxInfo(lpMMI);
}
//plmy.cpp:
Definestheclassbehaviorsfortheapplication.
//
#include"stdafx.h"
#include"plmy.h"
#include"MainFrm.h"
#include"plmyDoc.h"
#include"plmyView.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CPlmyApp
BEGIN_MESSAGE_MAP(CPlmyApp,CWinApp)
//{{AFX_MSG_MAP(CPlmyApp)
ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
//NOTE-theClassWizardwilladdandremovemappingmacroshere.
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!
//}}AFX_MSG_MAP
//Standardfilebaseddocumentcommands
ON_COMMAND(ID_FILE_NEW,CWinApp:
:
OnFileNew)
ON_COMMAND(ID_FILE_OPEN,CWinApp:
:
OnFileOpen)
//Standardprintsetupcommand
ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp:
:
OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CPlmyAppconstruction
CPlmyApp:
:
CPlmyApp()
{
//TODO:
addconstructioncodehere,
//PlaceallsignificantinitializationinInitInstance
}
/////////////////////////////////////////////////////////////////////////////
//TheoneandonlyCPlmyAppobject
CPlmyApptheApp;
/////////////////////////////////////////////////////////////////////////////
//CPlmyAppinitialization
BOOLCPlmyApp:
:
InitInstance()
{
AfxEnableControlContainer();
//Standardinitialization
//Ifyouarenotusingthesefeaturesandwishtoreducethesize
//ofyourfinalexecutable,youshouldremovefromthefollowing
//thespecificinitializationroutinesyoudonotneed.
#ifdef_AFXDLL
Enable3dControls();//CallthiswhenusingMFCinasharedDLL
#else
Enable3dControlsStatic();//CallthiswhenlinkingtoMFCstatically
#endif
//Changetheregistrykeyunderwhichoursettingsarestored.
//TODO:
Youshouldmodifythisstringtobesomethingappropriate
//suchasthenameofyourcompanyororganization.
SetRegistryKey(_T("LocalAppWizard-GeneratedApplications"));
LoadStdProfileSettings();//LoadstandardINIfileoptions(includingMRU)
//Registertheapplication'sdocumenttemplates.Documenttemplates
//serveastheconnectionbetweendocuments,framewindowsandviews.
CSingleDocTemplate*pDocTemplate;
pDocTemplate=newCSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CPlmyD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 课程设计 报告