计算机图形学实验指导

  • 格式:doc
  • 大小:2.24 MB
  • 文档页数:43

下载文档原格式

  / 43
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验课程任务与要求

目的与任务:

计算机图形学实验教学是为了将学生的计算机操作能力、分析能力、工程设计能力与应用实践结合起来,引导学生由浅入深地掌握计算机图形学理论与算法,掌握交互构图能力,具备工程应用的图形学基础。

实验基本要求:(以软件设计为主要表现形式)

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