西北工业大学c++大作业Word文件下载.docx
- 文档编号:22471640
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:28
- 大小:271.05KB
西北工业大学c++大作业Word文件下载.docx
《西北工业大学c++大作业Word文件下载.docx》由会员分享,可在线阅读,更多相关《西北工业大学c++大作业Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
OpenGL:
的工作顺序就是一个从定义几何要素到把象素段写入帧缓冲区的过程。
在屏幕上显示图象的主要步骤是以下3步:
1)构造几何要素(点、线、多边形、图像、位图),创建对象的数学描述。
在三维空间放置对象,选择有利的观察点。
2)计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。
3)光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。
在本程序中。
首先使用相关的WINDOWSAPI创建窗口,其次实现程序的相应功能:
1.使用OPENGL相应库函数画出正方体。
2.使之旋转起来。
3.在窗体中响应鼠标事件,控制正方体的旋转。
程序流程如图所示:
至此,程序的大体内容以及机构已经构造成型
OPENGL的主体绘制工作:
首先使用glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
清除屏幕和深度缓存,然后使用glLoadIdentity();
重置当前的模型观察矩阵,确定绘制好图形的位置glTranslatef(0.0f,0.0f,z);
移入屏幕z个单位。
函数glTranslatef(x,y,z)作用为沿着X,Y和Z轴移动;
现在是本程序中最重要的语句:
glRotatef(angle,0.0f,0.0f,0.0f),其中angle为每次旋转的角度,之后分别是XYZ三个轴的旋转分量,这三个旋转分量构成了三维坐标轴中的旋转法向量。
绘制:
voidCOPENGLActView:
:
OnDraw(CDC*pDC)
{
COPENGLActDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
staticGLfloatxangle=10.0f;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.0f,0.0f,-8.5);
glRotatef(xangle,1.0f,0.0f,0.0f);
xangle+=10.0f;
auxSolidTeapot(1.5);
glPopMatrix();
glFlush();
if(FALSE==:
SwapBuffers(m_pContextDC->
GetSafeHdc()))
AfxMessageBox("
½
»
º
³
å
Ç
ø
Ê
§
°
Ü
"
);
}
重置模型观察矩阵:
glMatrixMode(GL_PROJECTION);
//选择投影矩阵glLoadIdentity();
//重置投影矩阵//设置视口的大小
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
//选择模型观察矩阵glLoadIdentity();
//重置模型观察矩阵
视图框的输出:
BOOLCOPENGLActView:
OnPreparePrinting(CPrintInfo*pInfo)
{//默认的准备
returnDoPreparePrinting(pInfo);
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{//TODO:
添加额外的初始化之前打印
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
添加打印后进行清理
OnTimer(UINTnIDEvent)
//TODO:
在这里添加消息处理程序代码和/或调用默认
旋转的定时操作和动画效果处理:
this->
OnDraw(this->
GetDC());
CView:
OnTimer(nIDEvent);
OnAct()
SetTimer(1,15,NULL);
显示场景的设置:
VoidRenderSene(void)
{
staticfloatangle=0.0;
通过以上步骤,实现图形呈现,再通过旋转函数实现立体模型茶壶的旋转。
5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)
OPENGLAct.dswVC6工作区文件
OPENGLAct.dspVC6工程文件
OPENGLAct.cpp主程序
OPENGLAct.h主程序头文件
MainFrm.cpp框架类的实现文件
OPENGLActDoc.cpp文档
OPENGLActView.cpp视图框应用程序
OPENGLActView.h视图框应用程序头文件
StdAfx.cppVC6预处理文件
StdAfx.hVC6预处理头文件
OPENGLAct.rc资源文件
resource.h资源定义头文件
res图标存放文件夹
OPENGLAct.ico应用程序图标
6、函数模块(程序中各个函数的原型声明及其说明)
classCOPENGLActApp:
publicCWinApp应用程序类
classCOPENGLActDlg:
publicCDialog应用程序对话框
OnDraw(CDC*pDC);
立体模型绘制函数
PreCreateWindow(CREATESTRUCT&
cs);
窗口类或者样式的修改
OnPreparePrinting(CPrintInfo*pInfo);
函数的输出,实现立体茶壶的呈现
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/);
打印之前的初始化
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)打印之后的清理操作
OnSize(UINTnType,intcx,intcy)尺寸控制
OnTimer(UINTnIDEvent)定时器
OnAct()动画
7、使用说明(运行程序的小型说明书)
运行程序OPENGLAct.cpp后,进行调试,茶壶界面自动打开。
此时有色茶壶呈静态。
点击“查看”--“开始动画”后,茶壶自动翻转旋转,可全方位感知茶壶形态。
8、程序开发总结(简要叙述编写本作业的收获与思考)
收获:
通过此次程序设计实验,我对OpenGL图形函数有了初步的了解,并且能够根据书本上的现有函数整合、编写出简单的图形处理函数。
总结:
C++语言作用范围广,如果能够熟练掌握并且能够灵活运用,将会在工程运用方面起到很大的作用。
例如本题中,通过VC++6.0实现了立体茶壶模型的旋转,这个可以用于茶壶生产制造前的产品预览。
的功能十分强大,需要我们学习的地方还有很多。
9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越高)
Windows中抓取当前活动窗口:
Alt+PrintScreen,抓取全屏:
PrintScreen。
或者使用HyperSnap等软件(XX搜索)。
10、源程序(附上程序源代码,若是多个文件,标出文件名)
//1.应用程序主窗框的源代码
//MainFrm.cpp:
CMainFrame框架类的实现
#include"
stdafx.h"
OPENGLAct.h"
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)
//注意,ClassWizard将添加和删除映射宏。
//不编辑你所看到的这些生成的代码块!
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
staticUINTindicators[]=
ID_SEPARATOR,//状态行指标
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
//CMainFrame建设/破坏
CMainFrame:
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
|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!
m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("
Failedtocreatetoolbar\n"
//无法创建
}
m_wndStatusBar.Create(this)||
m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
Failedtocreatestatusbar\n"
删除这三行如果你不想工具栏
//bedockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&
m_wndToolBar);
return0;
BOOLCMainFrame:
cs)
if(!
CFrameWnd:
PreCreateWindow(cs))
returnFALSE;
修改窗口类或样式来修改
//theCREATESTRUCTcs
returnTRUE;
//CMainFrame诊断
voidCMainFrame:
AssertValid()const
CFrameWnd:
AssertValid();
Dump(CDumpContext&
dc)const
Dump(dc);
#endif//_DEBUG
//CMainFrame消息处理程序
//2.主程序源代码
//OPENGLAct.cpp:
为应用程序定义了类的行为。
//
OPENGLActDoc.h"
OPENGLActView.h"
//COPENGLActApp
BEGIN_MESSAGE_MAP(COPENGLActApp,CWinApp)
//{{AFX_MSG_MAP(COPENGLActApp)
ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
//不编辑你所看到的这些生成的代码块
//基于标准的文件文档的命令
ON_COMMAND(ID_FILE_NEW,CWinApp:
OnFileNew)
ON_COMMAND(ID_FILE_OPEN,CWinApp:
OnFileOpen)
//标准的打印设置命令
ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp:
OnFilePrintSetup)
//COPENGLActAppconstruction
COPENGLActApp:
COPENGLActApp()
建设代码添加在这里
//把所有InitInstance的重要初始化
//唯一的COPENGLActApp对象
COPENGLActApptheApp;
//COPENGLActAppinitialization
BOOLCOPENGLActApp:
InitInstance()
AfxEnableControlContainer();
//标准的初始化
//如果你不使用这些功能,希望减少规模
//你的最终的可执行文件,你应该从以下删除
//你不需要特定的初始化例程。
#ifdef_AFXDLL
Enable3dControls();
//称之为当使用MFCDLL共享
#else
Enable3dControlsStatic();
//当链接到MFC静态调用这个
//改变我们的注册表键设置存储。
你应该修改这个字符串是合适的
//如您的公司或组织的名称.
SetRegistryKey(_T("
LocalAppWizard-GeneratedApplications"
));
LoadStdProfileSettings();
//加载标准INI文件选项(包括系统)
//注册应用程序的文档模板。
文档模板
//作为文件之间的连接,框架窗口和视图。
CSingleDocTemplate*pDocTemplate;
pDocTemplate=newCSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(COPENGLActDoc),
RUNTIME_CLASS(CMainFrame),//主要SDI框架窗口
RUNTIME_CLASS(COPENGLActView));
AddDocTemplate(pDocTemplate);
//解析命令行标准shell命令,DDE,文件打开
CCommandLineInfocmdInfo;
ParseCommandLine(cmdInfo);
//调度命令在命令行上指定
ProcessShellCommand(cmdInfo))
//唯一的窗口已经初始化,所以显示和更新
m_pMainWnd->
ShowWindow(SW_SHOW);
UpdateWindow();
SetWindowText("
Ö
Æ
×
÷
OpenGL¶
¯
"
//CAboutDlg对话框用于应用程序
classCAboutDlg:
publicCDialog
public:
CAboutDlg();
//对话框数据
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizard生成的虚函数覆盖
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//实现
protected:
//{{AFX_MSG(CAboutDlg)
//没有消息处理程序
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
CAboutDlg:
CAboutDlg():
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
voidCAboutDlg:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//应用程序命令运行对话框
voidCOPENGLActApp:
OnAppAbout()
CAboutDlgaboutDlg;
aboutDlg.DoModal();
//COPENGLActApp消息处理程序
//3.文档框源代码
//OPENGLActDoc.cpp:
OPENGLActDoc类的实现
/////////////////////
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西北工业大学 c+ 作业