计算机图形学实验指导
- 格式:doc
- 大小:2.24 MB
- 文档页数:43
实验课程任务与要求
目的与任务:
计算机图形学实验教学是为了将学生的计算机操作能力、分析能力、工程设计能力与应用实践结合起来,引导学生由浅入深地掌握计算机图形学理论与算法,掌握交互构图能力,具备工程应用的图形学基础。
实验基本要求:(以软件设计为主要表现形式)
(1)上机前应准备好实验的程序设计算法描述与关键分析内容。
(2)准备好程序测试数据和设备操作步骤,上机调试、运行。
(3)完成每个实验后进行数据与程序对比分析。
(4)写出实验报告(含实验题目,不同顺序或本次算法的比较与效果分析,给出
运行结果。若实验未能通过,给出原因与今后改进措施)。
实验报告式样:
《计算机图形学》实验报告
实验题目
一.设计目的及要求
二.理论基础
三.算法设计与分析
四.程序调试及运行结果的自我分析与自我评价
五.设计心得及建议
实验一 VC++6.0+OpenGL绘图环境及简单图形的输出
学时安排:(2学时)
要求:(1)掌握VC++6.0+OpenGL绘图环境的设置;
(2)利用OpenGL绘制简单图形并在设备上输出;
(3)用glut编C++程程序的方法。
实验指导:
MFC编程
1.开发环境的配置
(1)将“glut32.dll”文件拷贝到操作系统对应的目录中。
(2)将“glut32.h”文件拷贝到VC++6.0的Include文件夹中。
(3)将“glut32.lib”文件拷贝到VC++6.0的lib文件夹中。
2.启动VC6.0,新建一个单文档应用程序,如名称MySDOpenGL。
3.利用MFC ClassWizard为CMySDOpenGLView类添加消息WM_CREATE ,WM_DESTROY ,WM_SIZE,WM_TIMER的响应函数。
4.如下所示在MySDOpenGLView.h中加入源代码。
public: //添加成员函数与成员变量
BOOL RenderScene();
BOOL SetupPixelFormat(void);
void SetLogicalPalette(void);
BOOL InitializeOpenGL(CDC* pDC);
HGLRC m_hRC; //OpenGL绘制描述表
HPALETTE m_hPalette; //OpenGL调色板
CDC* m_pDC; //OpenGL设备描述表
5.如下所示在MySDOpenGLView.cpp中加入源代码。
BOOL CMySDOpenGLView::PreCreateWindow(CREATESTRUCT& cs)
{ 。。。。。。
cs.style |=WS_CLIPCHILDREN | WS_CLIPSIBLINGS; //设置窗口类型
。。。。。。
}
void CMySDOpenGLView::OnDraw(CDC* pDC)
{
。。。。。。
RenderScene(); //渲染场景
。。。。。。
}
int CMySDOpenGLView::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if (CView::OnCreate(lpCreateStruct) == -1) return -1;
//初始化OpenGL和设置定时器
m_pDC = new CClientDC(this);
SetTimer(1, 20, NULL);
InitializeOpenGL(m_pDC);
return 0;
}
void CMySDOpenGLView::OnDestroy()
{
CView::OnDestroy();
//删除调色板和渲染上下文、定时器
::wglMakeCurrent(0,0);
::wglDeleteContext( m_hRC);
if (m_hPalette)
DeleteObject(m_hPalette);
if ( m_pDC ) { delete m_pDC; }
KillTimer(1);
}
void CMySDOpenGLView::OnSize(UINT nType, int cx, int cy) {
CView::OnSize(nType, cx, cy);
//添加窗口缩放时的图形变换函数
glViewport(0,0,cx,cy);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) cx/(GLfloat) cy, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
void CMySDOpenGLView::OnTimer(UINT nIDEvent)
{//添加定时器响应函数和场景更新函数
Invalidate(FALSE);
//year = (year + 5) % 360;day = (day + 10) % 360;
CView::OnTimer(nIDEvent);
}
void CMySDOpenGLView::SetLogicalPalette(void) //设置逻辑调色板
{
struct{
WORD Version;
WORD NumberOfEntries;