研究生计算机图形学课程室内场景OpenGL--实验报告
更新时间:2023-12-20 06:15: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--实验报告12-20
火电工程资料规范,及宣贯资料08-11
水的呼唤作文800字02-05
2022年1月浙江省普通高校招生选考科目考试化学仿真模拟试卷02(解04-16
三角梅作文600字06-19
高速公路、铁路、电站等建设工程类检查表06-06
《清稗类钞》服饰类04-12
“快递下乡”,便了村民惠了电商09-17
《探究感应电流的产生条件》教学案例09-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 图形
- 场景
- 研究生
- 室内
- 课程
- 实验
- 计算机
- 报告
- OpenGL
- 长安大学大创项目申请书
- WP8拍照利器 双核诺基亚Lumia 920评测 - 图文
- 建筑力学复习材料
- 知名动漫公司郑州开分号 河南动漫年销售将达50亿
- 诺贝尔经济学奖得主轶事
- 安徽工业大学《企业管理》复习题
- 外研社英语六年级上册2018年课文内容及翻译Unit1-Unit6
- 实验02 动态规划算法
- 鬼针草的功效和作用与禁忌
- 2014年—湖北—省考—行测—真题—判断推理
- 2019届高三数学一轮复习 第十二章 复数、算法、推理与证明 第四节 直接证明和间接证明夯基提能作业本 理
- 2009年中考数学压轴题汇编(二)
- 公司安全管理准则
- 网络配置与应用教学大纲杨伟-20110809 - 图文
- 2013届九年级化学试卷(1-9)
- 时尚COSMO美容大奖
- 小学语文教学论教学大纲
- 关于轮滑的介绍
- 黑苹果显卡驱动详解
- 初中生物填空题(最全)