研究生计算机图形学课程室内场景OpenGL实验报告.docx

上传人:b****2 文档编号:24221012 上传时间:2023-05-25 格式:DOCX 页数:43 大小:452.52KB
下载 相关 举报
研究生计算机图形学课程室内场景OpenGL实验报告.docx_第1页
第1页 / 共43页
研究生计算机图形学课程室内场景OpenGL实验报告.docx_第2页
第2页 / 共43页
研究生计算机图形学课程室内场景OpenGL实验报告.docx_第3页
第3页 / 共43页
研究生计算机图形学课程室内场景OpenGL实验报告.docx_第4页
第4页 / 共43页
研究生计算机图形学课程室内场景OpenGL实验报告.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

研究生计算机图形学课程室内场景OpenGL实验报告.docx

《研究生计算机图形学课程室内场景OpenGL实验报告.docx》由会员分享,可在线阅读,更多相关《研究生计算机图形学课程室内场景OpenGL实验报告.docx(43页珍藏版)》请在冰豆网上搜索。

研究生计算机图形学课程室内场景OpenGL实验报告.docx

研究生计算机图形学课程室内场景OpenGL实验报告

《高级计算机图形学》实验报告

姓名:

 学号:

 班级:

【实验报告要求】

实验名称:

高级计算机图形学室场景

实验目的:

掌握使用OpenGL生成真实感复杂对象的方法,进一步熟练掌握构造实体几何表示法、扫描表示法、八叉树法、BSP树法等建模方法。

实验要求:

要求利用OpenGL生成一个真实感的复杂对象及其周围场景,并显示观测点变化时的几何变换,要具备在一个纹理复杂的场景中漫游功能。

要求使用到光线跟踪算法、纹理映射技术以及实时绘制技术。

一、实验效果图

图1:

正面效果图

图2:

背面效果图

图4:

背面效果图

图4:

室场景细节效果图

图5:

场景角度转换效果图

二、源文件数据代码:

共6个文件,其实现代码如下:

1、DlgAbout.cpp

#include"StdAfx.h"

#include"DlgAbout.h"

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

END_MESSAGE_MAP()

2、FormCommandView.cpp

#include"stdafx.h"

#include"Tool.h"

#include"MainFrm.h"

#include"FormCommandView.h"

#include"ToolDoc.h"

#include"RenderView.h"

//Downloadby

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

//CFormCommandView

IMPLEMENT_DYNCREATE(CFormCommandView,CFormView)

CFormCommandView:

:

CFormCommandView()

:

CFormView(CFormCommandView:

:

IDD)

{

//{{AFX_DATA_INIT(CFormCommandView)

m_Smooth=FALSE;

m_Antialias=FALSE;

//}}AFX_DATA_INIT

}

CFormCommandView:

:

~CFormCommandView()

{

}

voidCFormCommandView:

:

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()

/////////////////////////////////////////////////////////////////////////////

//CFormCommandViewdiagnostics

#ifdef_DEBUG

voidCFormCommandView:

:

AssertValid()const

{

CFormView:

:

AssertValid();

}

voidCFormCommandView:

:

Dump(CDumpContext&dc)const

{

CFormView:

:

Dump(dc);

}

CToolDoc*CFormCommandView:

:

GetDocument()//non-debugversionisinline

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CToolDoc)));

return(CToolDoc*)m_pDocument;

}

#endif//_DEBUG

//OnPaint

voidCFormCommandView:

:

OnPaint()

{

//Devicecontextforpainting

CPaintDCdc(this);

//OptionsarestoredinApplication

CToolApp*pApp=(CToolApp*)AfxGetApp();

CRectrect;

//Colorback

m_ControlBackColor.GetWindowRect(&rect);

ScreenToClient(&rect);

CBrushBrushBack(pApp->m_OptionColorGlBack);

dc.FillRect(&rect,&BrushBack);

}

//OnLButtonUp

voidCFormCommandView:

:

OnLButtonUp(UINTnFlags,

CPointpoint)

{

CRectrect;

CToolApp*pApp=(CToolApp*)AfxGetApp();

//Optionbackcolor

m_ControlBackColor.GetWindowRect(&rect);

ScreenToClient(&rect);

if(rect.PtInRect(point))

{

CColorDialogdlg(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);

returnpView;

}

//Model

voidCFormCommandView:

:

OnRadioModel1()

{

glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);

this->GetRenderView()->InvalidateRect(NULL,FALSE);

}

voidCFormCommandView:

:

OnRadioModel2()

{

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

this->GetRenderView()->InvalidateRect(NULL,FALSE);

}

//OnCheckSmooth

voidCFormCommandView:

:

OnCheckSmooth()

{

m_Smooth=!

m_Smooth;

if(m_Smooth)

glShadeModel(GL_SMOOTH);

else

glShadeModel(GL_FLAT);

this->GetRenderView()->InvalidateRect(NULL,FALSE);

}

//OnCheckAntialias

//Toggleantialiasedlines

voidCFormCommandView:

:

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);

}

GetRenderView()->InvalidateRect(NULL,FALSE);

}

3、MainFrm.cpp

#include"stdafx.h"

#include"Tool.h"

//Downloadby

#include"MainFrm.h"

#include"FormCommandView.h"

#include"RenderView.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_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()

staticUINTindicators[]=

{

ID_SEPARATOR,//statuslineindicator

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

//CMainFrameconstruction/destruction

CMainFrame:

:

CMainFrame()

{

}

CMainFrame:

:

~CMainFrame()

{

}

intCMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

if(CFrameWnd:

:

OnCreate(lpCreateStruct)==-1)

return-1;

if(!

m_wndToolBar.Create(this)||

!

m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

TRACE0("Failedtocreatetoolbar\n");

return-1;//failtocreate

}

if(!

m_wndStatusBar.Create(this)||

!

m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

{

TRACE0("Failedtocreatestatusbar\n");

return-1;//failtocreate

}

m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle()|

CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);

return0;

}

BOOLCMainFrame:

:

PreCreateWindow(CREATESTRUCT&cs)

{

cs.cx=600;cs.cy=500;

returnCFrameWnd:

:

PreCreateWindow(cs);

}

//CMainFramediagnostics

#ifdef_DEBUG

voidCMainFrame:

:

AssertValid()const

{

CFrameWnd:

:

AssertValid();

}

voidCMainFrame:

:

Dump(CDumpContext&dc)const

{

CFrameWnd:

:

Dump(dc);

}

#endif//_DEBUG

//CMainFramemessagehandlers

voidCMainFrame:

:

OnPaint()

{

CPaintDCdc(this);//devicecontextforpainting

}

BOOLCMainFrame:

:

OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext)

{

if(!

m_wndSplitter.CreateStatic(this,1,2,WS_CHILD|WS_VISIBLE))

{

TRACE("FailedtoCreateStaticSplitter\n");

returnFALSE;

}

//Firstsplitterpane

if(!

m_wndSplitter.CreateView(0,0,

RUNTIME_CLASS(CRenderView),CSize(600,500),pContext))

{

TRACE("Failedtocreatecommandviewpane\n");

returnFALSE;

}

if(!

m_wndSplitter.CreateView(0,1,

RUNTIME_CLASS(CFormCommandView),CSize(0,0),pContext))

{

TRACE("Failedtocreatecommandviewpane\n");

returnFALSE;

}

//Secondsplitterpane

returnTRUE;

}

4、RenderView.cpp

#include"stdafx.h"

#include"Tool.h"

#include

#include

#include

#include"ToolDoc.h"

#include"RenderView.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

externvoidRender(void);

//Thisistheholdingspaceforthelandscapecolours.

intWinWidth,WinHeigth;

unsignedshortintcomp=32;//Scalemodifier.

unsignedshortinttemp,texture_mapping=FALSE,

land_fogging=TRUE,flat_shading=TRUE;

floatangle,Near,ex,ey,ez,cx,cy,cz;

//Initialeyepositionandvectorofsight.

staticGLfloatspeed=0;

//Thefollowingcodeformouseroutineswascontributed.

//Theseareusedforthemotionfunction.

#defineFORWARD1

#defineUP2

#defineTURNLEFT3

#defineLOOKUP5

//Mousepositionandbutton.

intoldmx=0,oldmy=0,mb;

//CRenderView

IMPLEMENT_DYNCREATE(CRenderView,CView)

BEGIN_MESSAGE_MAP(CRenderView,CView)

//{{AFX_MSG_MAP(CRenderView)

ON_WM_DESTROY()

ON_WM_SIZE()

ON_WM_LBUTTONDOWN()

ON_WM_LBUTTONUP()

ON_WM_MOUSEMOVE()

ON_WM_PAINT()

ON_WM_CREATE()

//}}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()

//CRenderViewconstruction/destruction

CRenderView:

:

CRenderView()

{

//OpenGL

m_hGLContext=NULL;

m_GLPixelIndex=0;

//Mouse

m_LeftButtonDown=FALSE;

m_RightButtonDown=FALSE;

m_CursorRotation=AfxGetApp()->LoadCursor(IDC_CURSOR_ROTATION);

//Colors

CToolApp*pApp=(CToolApp*)AfxGetApp();

m_ClearColorRed=GetRValue(pApp->m_OptionColorGlBack);

m_ClearColorGreen=GetGValue(pApp->m_OptionColorGlBack);

m_ClearColorBlue=GetBValue(pApp->m_OptionColorGlBack);

ReadData();

WinWidth=1000;

WinHeigth=800;

LoadAllTexture();

InitLookAt();

}

//============================================

//InitGeometry

//============================================

voidCRenderView:

:

InitGeometry(void)

{

GLfloatfogColor[4]={0.75,0.75,1.0,1.0};

speed=0;

srand(224);

srand((unsigned)time(NULL));

glPixelStorei(GL_UNPACK_ALIGNMENT,1);

glEnable(GL_DEPTH_TEST);

glShadeModel(GL_FLAT);

glFogi(GL_FOG_MODE,GL_LINEAR);

glFogfv(GL_FOG_COLOR,fogColor);

glFogf(GL_FOG_DENSITY,0.8f);

glFogf(GL_FOG_START,400.0f);

glFogf(GL_FOG_END,500.0f);

glClearColor(0.75f,0.75f,1.0f,1.0f);

}

CRenderView:

:

~CRenderView()

{

FreeAllTexture();

freelist();

}

BOOLCRenderView:

:

PreCreateWindow(CREATESTRUCT&cs)

{

returnCView:

:

PreCreateWindow(cs);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1