研究生计算机图形学课程室内场景OpenGL--实验报告
更新时间:2024-03-04 21:44:01 阅读量: 综合文库 文档下载
- 计算机图形学课程论文推荐度:
- 相关推荐
《高级计算机图形学》实验报告
姓 名: 学号: 班级:
【实验报告要求】
实验名称:高级计算机图形学室内场景
实验目的:掌握使用OpenGL生成真实感复杂对象的方法,进一步熟练掌握构造实体几何表示法、扫描表示法、八叉树法、BSP树法等建模方法。
实验要求:要求利用OpenGL生成一个真实感的复杂对象及其周围场景,并显示观测点变化时的几何变换,要具备在一个纹理复杂的场景中漫游功能。要求使用到光线跟踪算法、纹理映射技术以及实时绘制技术
一、实验效果图
。
图1:正面效果图
1
图2:背面效果图
图4:背面效果图
2
图4:室内场景细节效果图
图5:场景角度转换效果图
3
二、源文件数据代码:
共6个文件,其实现代码如下: 1、DlgAbout.cpp #include \#include \
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { }
void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); }
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP()
2、FormCommandView.cpp #include \#include \#include \
#include \#include \#include \
// Download by http://www.codefans.net #ifdef _DEBUG
#define new DEBUG_NEW #undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
// CFormCommandView
IMPLEMENT_DYNCREATE(CFormCommandView, CFormView)
CFormCommandView::CFormCommandView() : CFormView(CFormCommandView::IDD) { //{{AFX_DATA_INIT(CFormCommandView)
4
m_Smooth = FALSE; m_Antialias = FALSE; //}}AFX_DATA_INIT }
CFormCommandView::~CFormCommandView() { }
void CFormCommandView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFormCommandView) DDX_Control(pDX, IDC_FRAME_COLOR_BACK, m_ControlBackColor); DDX_Check(pDX, IDC_CHECK_SMOOTH, m_Smooth); DDX_Check(pDX, IDC_CHECK_ANTIALIAS, m_Antialias); //}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CFormCommandView, CFormView) //{{AFX_MSG_MAP(CFormCommandView) ON_WM_PAINT() ON_WM_LBUTTONUP() ON_BN_CLICKED(IDC_RADIO_MODEL_1, OnRadioModel1) ON_BN_CLICKED(IDC_RADIO_MODEL_2, OnRadioModel2) ON_BN_CLICKED(IDC_CHECK_SMOOTH, OnCheckSmooth) ON_BN_CLICKED(IDC_CHECK_ANTIALIAS, OnCheckAntialias) //}}AFX_MSG_MAP END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CFormCommandView diagnostics
#ifdef _DEBUG
void CFormCommandView::AssertValid() const { CFormView::AssertValid(); }
5
void CFormCommandView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); }
CToolDoc* CFormCommandView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CToolDoc))); return (CToolDoc*)m_pDocument; }
#endif //_DEBUG
// OnPaint
void CFormCommandView::OnPaint() { // Device context for painting CPaintDC dc(this); // Options are stored in Application CToolApp *pApp = (CToolApp *)AfxGetApp(); CRect rect; // Color back m_ControlBackColor.GetWindowRect(&rect); ScreenToClient(&rect); CBrush BrushBack(pApp->m_OptionColorGlBack); dc.FillRect(&rect,&BrushBack); }
// OnLButtonUp
void CFormCommandView::OnLButtonUp(UINT nFlags, CPoint point)
{ CRect rect; CToolApp *pApp = (CToolApp *)AfxGetApp();
6
// Option back color m_ControlBackColor.GetWindowRect(&rect); ScreenToClient(&rect); if(rect.PtInRect(point)) { CColorDialog dlg(pApp->m_OptionColorGlBack); if(dlg.DoModal()==IDOK) { pApp->m_OptionColorGlBack = dlg.GetColor(); CRenderView *pView = (CRenderView *)GetRenderView(); pView->m_ClearColorRed (float)GetRValue(pApp->m_OptionColorGlBack) / 255.0f;
pView->m_ClearColorGreen
(float)GetGValue(pApp->m_OptionColorGlBack) / 255.0f;
pView->m_ClearColorBlue (float)GetBValue(pApp->m_OptionColorGlBack) / 255.0f;
this->InvalidateRect(&rect,FALSE); pView->InvalidateRect(NULL,FALSE); } } CFormView::OnLButtonUp(nFlags, point); }
// GetRenderView
CView *CFormCommandView::GetRenderView() { CToolApp *pApp = (CToolApp *)AfxGetApp(); CMainFrame *pFrame = (CMainFrame *)pApp->m_pMainWnd; CView *pView = (CView *)pFrame->m_wndSplitter.GetPane(0,1); return pView; }
// Model
void CFormCommandView::OnRadioModel1() { glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); this->GetRenderView()->InvalidateRect(NULL,FALSE); }
7
= = =
void CFormCommandView::OnRadioModel2() { glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); this->GetRenderView()->InvalidateRect(NULL,FALSE); }
// OnCheckSmooth
void CFormCommandView::OnCheckSmooth() { m_Smooth = !m_Smooth; if(m_Smooth) glShadeModel(GL_SMOOTH); else glShadeModel(GL_FLAT); this->GetRenderView()->InvalidateRect(NULL,FALSE); }
// OnCheckAntialias // Toggle antialiased lines
void CFormCommandView::OnCheckAntialias() { m_Antialias = !m_Antialias; if(m_Antialias) { glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); glLineWidth(1.5f); } else { glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); glLineWidth(1.0f); }
8
}
GetRenderView()->InvalidateRect(NULL,FALSE);
3、MainFrm.cpp #include \#include \
// Download by http://www.codefans.net #include \
#include \#include \
#ifdef _DEBUG
#define new DEBUG_NEW #undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP()
static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };
// CMainFrame construction/destruction CMainFrame::CMainFrame() { }
9
CMainFrame::~CMainFrame() { }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0(\ return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0(\ return -1; // fail to create } m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); return 0; }
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { cs.cx = 600; cs.cy = 500; return CFrameWnd::PreCreateWindow(cs); }
// CMainFrame diagnostics #ifdef _DEBUG
void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); }
10
正在阅读:
研究生计算机图形学课程室内场景OpenGL--实验报告03-04
治世02-18
水稻乳米项目可行性研究报告(发改立项备案+2013年最新案例范文05-23
南京市校园应急预案编制参考06-19
跨汉宜高铁特大桥顶推连续梁施工方案2017.6.20(修改后报铁路局05-20
数一模拟5答案04-06
XML与电子商务应用综合练习题(式样)10-08
建筑工程定额与预算考试卷(附答案)04-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 图形
- 场景
- 研究生
- 室内
- 课程
- 实验
- 计算机
- 报告
- OpenGL
- c语言复习题答案(49题)
- 国美电器香港借壳上市案例
- 浅谈王熙凤人物性格 - 图文
- 应届大学生培养方案
- 跳高跳远训练计划
- 知名动漫公司郑州开分号 河南动漫年销售将达50亿
- 黑苹果显卡驱动详解
- PayPal&Ipsos 2015年全球跨境贸易报告 - 图文
- 防范资金风险采取的措施及成效
- 系统辨识第三次作业
- 玩转APM:Rover 无人车 第一篇
- MPLS TE快速重路由技术白皮书
- 有效课堂与高效课堂解读
- 利用隐圆求最大或最小值--完美资料
- 2.1.寻访小动物 - 图文
- 7种最佳健脑食物帮你提高记忆力 - 图文
- 2019届高三数学一轮复习 第十二章 复数、算法、推理与证明 第四
- 建筑电气设计中节能措施与方法论文
- 2009年中考数学压轴题汇编(二)
- 神奇的图片