计算机图形学实验指导书

计算机图形学实验指导书
计算机图形学实验指导书

计算机图形学实验指导书

编者:吴学毅

西安理工大学

印刷包装工学院信息科学系

2010年9月

目录

上机实验说明 (2)

【实验环境】 (2)

【实验要求】 (2)

【实验项目及学时分配】 (2)

【实验报告和考核】 (2)

【实验大纲】见附录A (2)

【实验环节详细说明】见附录B (2)

实验(一) (3)

【实验题目】基本图元绘制 (3)

【实验目的】 (3)

【实验内容】 (3)

【实验报告要求】 (4)

实验(二) (5)

【实验题目】二维图元的几何变换 (5)

【实验目的】 (5)

【实验内容】 (5)

【实验报告要求】 (6)

实验(三) (7)

【实验题目】线段、多边形裁剪算法实现 (7)

【实验目的】 (7)

【实验内容】 (7)

实验(四) (8)

【实验题目】三维观察算法实现 (8)

【实验目的】 (8)

【实验内容】 (8)

实验(五) (9)

【实验题目】光照模型与纹理映射实现 (9)

【实验目的】 (9)

【实验内容】 (9)

【实验报告要求】 (9)

附录A (10)

《计算机图形学》实验教学大纲 (10)

附录B (12)

实验环节详细说明 (12)

上机实验说明

【实验环境】

操作系统:Microsoft Windows 2000或以上系统。

软件平台:Visual C++6.0程序开发的软件平台及OpenGL图形库。

【实验要求】

1、每次实验前,熟悉实验目的、实验内容及相关的基本理论知识。

2、无特殊要求,原则上实验为1人1组,必须独立完成。

3、实验所用机器最好固定,以便更好地实现实验之间的延续性和相关性,并便于检查。

4、按要求认真做好实验过程及结果记录。

【实验项目及学时分配】

本实验共计10学时,实验项目及学时分配如下:

【实验报告和考核】

1、实验报告必需采用统一的实验报告纸,撰写符合一定的规范,详见实验报告撰写格

式及规范。

2、本实验占该课程最终评定成绩的15%。

【实验大纲】见附录A

【实验环节细节说明】见附录B

实验(一)

【实验题目】基本图元绘制

【实验目的】

1、通过本实验,掌握在VC6.0环境下基于OpenGL程序开发的运行环境配置,了解基于OpenGL图形库的控制台图形程序开发框架,并对二维观察变换中相关函数的使用及参数有所了解。

2、掌握OpenGL基本图元的绘制方法和属性控制方法,并编程实现综合使用多种图形函数绘制复杂图形。

【实验内容】

1.VC6.0环境下基于OpenGL程序开发的运行环境配置

由于VC6.0应用程序开发系统只支持OpenGL核心库函数,而在程序开发中需使用大量核心库所不具有的函数,因此,在进行图形开发前需进行OpenGL程序开发的运行环境配置。在此需将有关的函数库文件拷贝到指定的文件目录下即可。过程如下:

①将OpenGL开发库子目录下\INCLUDE所有文件拷贝到VC所在子目录的\include\gl

目录下。

②将OpenGL开发库子目录下\LIB所有文件拷贝到VC所在子目录的\lib目录下。

③将OpenGL开发库子目录下\DLL所有文件拷贝到windows所在子目录的\system32

目录下。

2.OpenGL控制台应用程序框架

OpenGL控制台应用程序框架及各函数的作用、参数情况说明见教材2.2.1节 OpenGL控制台应用程序框架。

3.基本图元绘制

该实验将综合利用第二章、第三章中有关基本图元及其属性控制的函数,自我设计能够

将下属图形要素涵盖的图形,并编程实现。

①基本图元:应包括点、线段、各种多边形;

②属性控制:应包括颜色设置、不同大小的点(如1像素点、3像素点等)、不同类型的线段(实线、点划线等);

③绘制出屏幕坐标系的2个坐标轴,并利用绘制线段或多边形方式绘制1个圆。

【实验报告要求】

1.简述VC++环境下OpenGL图形系统开发的一般过程。

2.总结在程序设计和实现过程中遇到的主要问题及解决过程。

3.图形坐标与世界坐标系、屏幕视口坐标系之间的关系是什么?在放大、缩小观察图形时应调节那些函数的那些参数?

实验(二)

【实验题目】二维图元的几何变换

【实验目的】

1、了解和掌握二维坐标系中物体坐标、观察坐标、屏幕坐标之间的关系,能够在合适的位置定义物体的几何形状,并通过定义合适的观察坐标系在视口中显示出物体。

2、了解和掌握以坐标原点、坐标轴为中心的物体几何变换方式,包括平移、旋转和缩放对应的函数。

3、了解和掌握矩阵操作函数的原理和过程,并实现绕任意点或任意轴为参考进行平移、旋转、缩放程序。

【实验内容】

2.了解和掌握二维坐标系中物体坐标、观察坐标、屏幕坐标之间的关系。

要求:对上一次编写的程序中的几何物体改变其几何位置和大小,改变gluOrtho2D函数中的参数,改变glViewport中的参数,观察所要绘制的图形和视口的位置发生了什么变化,并思考原因。

3.了解和掌握以坐标原点、坐标轴为中心的物体几何变换方式。

要求:绘制一个二维图形,并使用以坐标原点、坐标轴为参考的物体几何变换(包括平移、旋转和缩放)函数,对其进行相应的几何变换,并以不同颜色加以区分。

3.了解和掌握矩阵操作函数的原理和过程。

要求:采用矩阵操作方式实现与第二步中相同的几何变换过程。

4.实现绕任意点或任意轴为中心进行平移、旋转、缩放程序。

要求:根据课堂上所讲的绕任意点或任意轴为参考进行几何变换的原理,编写相应的旋转和缩放函数,并采用所实现的函数对所绘制的图形实现绕任意点或任意轴为参考的几何变换。

【实验报告要求】

1.总结并简述绕任意点或任意轴为中心进行几何变换的原理。

2.总结在程序设计和实现过程中遇到的主要问题及解决过程。

3.用矩阵操作实现几何变换有何优点?

实验(三)

【实验题目】线段、多边形裁剪算法实现

【实验目的】

1、深入了解和掌握Cohen_Sutherland线段裁剪算法的原理和程序实现过程。

2、深入了解和掌握Sutherland-Hodgman多边形裁剪算法的原理和程序实现过程。【实验内容】

4.根据Cohen-Sutherland直线裁剪算法的原理,实现用矩形窗口对某线段的裁剪过程。要求:根据Cohen-Sutherland直线裁剪算法的原理,编写实现该算法的各个子函数,并在屏幕上画出用于裁剪的矩形窗口,用不同的颜色和线型标注被裁剪的线段及裁剪后的结果。5.根据Sutherland-Hodgman多边形裁剪算法的原理,实现用矩形对某多边形的裁剪过程。要求:根据Sutherland-Hodgman多边形裁剪算法的原理,编写实现该算法的各个子函数,并在屏幕上画出用于裁剪的矩形窗口,用不同的颜色和线型标注被裁剪的多边形及裁剪后的结果。

【实验报告要求】

1.总结在程序设计和实现过程中遇到的主要问题及解决过程。

2.在Cohen-Sutherland直线裁剪算法中若改变9个区域的编码方式会对裁剪结果产生什么影响?

3.在OpenGL中如何实现对二维图形的裁剪?

实验(四)

【实验题目】三维观察算法实现

【实验目的】

6.了解和掌握三维空间中几何物体的绘制方法。

7.了解和掌握三维观察变换的原理及OpenGL中实现三维观察变换函数的参数对三维观察的影响。

【实验内容】

1、了解和掌握三维空间中几何物体的绘制方法。

要求:了解在三维空间坐标系中三维物体的定义方法,注意多边形内部和外部定义,并绘制一个包含内、外部的三维物体。

2、实现三维观察变换。

要求:利用gluPerspective等相关三维观察变换函数,实现对上面所绘制的三维物体进行三维裁剪和三维观察变换,并对函数中的参数进行改变,观察屏幕显示结果,进一步了解三维观察变换的原理。

【实验报告要求】

1.总结三维观察变换相关函数中参数的不同变化对三维观察结果的影响。

2.总结在程序设计和实现过程中遇到的主要问题及解决过程。

3.glMatrixMode函数对三维观察变换有何影响?

实验(五)

【实验题目】光照模型与纹理映射实现

【实验目的】

8.熟悉三维空间中光照模型的原理,掌握OpenGL中光照模型的定义方法。

9.了解三维物体纹理映射的基本原理,掌握OpenGL中纹理映射的基本方法。

【实验内容】

1、OpenGL中光照模型的定义方法的实现。

要求:绘制一个空间三维物体,并在三维空间中定义不同的光源,涉及不同的光源类型、光的颜色,并开启光源,观察通过改变定义光源的不同参数,得到的绘制结果有何不同。2、OpenGL中纹理映射的实现。

要求:画出一个二维图形,并采用程序生成纹理或读入纹理图像的方法,对所绘制的二维图形进行纹理映射,通过改变不同的参数观察所得到的结果有何不同。

【实验报告要求】

1.总结三维空间中定义光照模型的过程,及定义光照模型相关函数中参数的不同变化对观察结果的影响。

2.总结三维空间中纹理映射的过程,及纹理映射相关函数中参数的不同变化对观察结果的影响。

2.总结在程序设计和实现过程中遇到的主要问题及解决过程。

附录A

《计算机图形学》实验教学大纲

一、制定实验教学大纲的依据

根据本校《2008级本科指导性培养计划》和2008年6月制定的《计算机图形学》课程教学大纲制定。

二、本实验课在专业人才培养中的地位和作用

《计算机图形学》是数字媒体技术专业必修的一门专业基础课。通过本课程的学习,可以使学生了解计算机图形学所研究的内容、广泛的应用,掌握计算机图形的基本生成算法、图形几何变换的原理及实现方法、二维和三维观察、图形表示、曲线、曲面的图形生成技术及真实感图形等。同时结合OpenGL图形库的使用,使学生掌握图形程序开发的基本技术和方法。

三、本实验课程讲授的基本实验理论

主要讲授利用OpenGL图形库函数进行二维、三维图形的绘制的基本方法,从而使学生能将计算机图形学的基本理论与OpenGL图形开发实践有机结合起来,加深对理论的理解和应用实践能力。主要涉及图形光栅化原理,及基于光栅化原理的所进行的基本图元的生成、填充、裁剪算法、二维图形变换、二维和三维观察变换、光照模型和纹理映射等。

1.OpenGL运行环境配置及基本图元绘制;

2.二维观察变换及二维图形几何变换;

3.线段裁剪、多边形裁剪算法;

4.三维观察变换;

5.真实感图形绘制中光照模型的设置和纹理映射过程。

四、本实验课学生应达到的能力

本实验开设的目的:一方面使学生通过实验对图形学基本理论和算法在实践中的应用有一个直观、深刻的认识,从而使学生掌握将理论应用于实践的方法,同时对理论的认识得到深化;另一方面,通过编程训练加强了学生对基于OpenGL图形库的基本图形算法、二维图形变换、二三维观察变换、真实感图形处理等实际编程动手能力的训练;为学生进一步了解和掌握包括图形用户界面、CAD、数字图像处理等的原理、技术、方法打下坚实的理论和实践基础。

五、学时、教学文件及形式

学时:本课程总学时为48学时,其中实验为10学时,占总学时的20%。

教学文件:校编《计算机图形学实验指导书》;实验报告学生自拟。

要求学生实验前预习实验指导书,并理解相关算法思想及软件实现过程,具体编程过程由学生独立完成。

六、实验考核办法与成绩评定

实验课成绩占本课程总成绩15%,对缺少实验成绩者,本课程不予通过(对实验成绩的考核包括上机编程结果占50%,实验报告占40%,考勤占10%)。

七、仪器设备及注意事项

仪器设备:有快速的较高性能微机和较大内存与硬盘的设备

注意事项:注意保护设备

八、实验项目的设置及学时分配

制定人:吴学毅

审核人:张二虎

批准人:周世生

制定日期:2008.7

附录B

实验环节详细说明

实验(一):基本图元绘制

一.VC6.0环境下基于Win32控制台的OpenGL程序创建过程

在Visual C++ 6.0环境下有两种OpenGL程序开发框架:(1)基于控制台的应用程序框架;(2)MFC环境下单文档、多文档、对话框应用程序框架。其中前者是最为简单、有效的知识验证型程序开发框架。基于控制台的OpenGL应用程序框架与一般的C语言程序结构一样,只是其中在定义图形窗口、初始化操作和图形数据处理与显示时,须使用相应的OpenGL 函数。下面就基于控制台的应用程序框架开发过程简述如下:

1.由于VC6.0应用程序开发系统只支持OpenGL核心库函数,而在程序开发中需使用大量核心库所不具有的函数,因此,在进行图形开发前需进行OpenGL程序开发的运行环境配置。在此需将有关的函数库文件拷贝到指定的文件目录下即可。过程如下:

①将OpenGL开发库子目录下\INCLUDE所有文件拷贝到VC所在子目录的\include\gl

目录下。

②将OpenGL开发库子目录下\LIB所有文件拷贝到VC所在子目录的\lib目录下。

③将OpenGL开发库子目录下\DLL所有文件拷贝到windows所在子目录的\system32目录下。

2.在创建新工程的Project标签中应选择“Win32 Console Application”,并选择适当的保存工程的文件夹路径。

3.在如图1所示的创建向导页面选择A “Hello,World!”application.选项。点击Finish 按钮完成工程的创建。点击工具栏中的“Execute Program”按钮进行工程的编译、链接和运行,并出现Hell,World! Press any key to continue的运行结果。

图1 工程创建向导

4.在工程创建完毕需添加OpenGL库。选择“Project Setting”对话框,如图2所示。在对话框中选择“Link”标签,在“Object/library modules”编辑框中加入“”。opengl32.lib glu32.lib glaux.lib

图2 工程设置对话框界面

5.在系统自动生成的*.cpp文件中,删去原文件内容,写入自己的程序代码。

注意:

1.由于实验室的机器对C、D盘进行了写保护,因此,若机器中C、D盘中无相应的OpenGL 库文件。则在每次上机时,需重新进行上述步骤1的库文件配置操作。

二、OpenGL控制台应用程序框架

OpenGL在Win32控制台下程序框架仍以main函数作为程序运行的入口,整个程序由3大部分组成。第1部分为应包含的头文件,其中主要是包含glut.h文件,该头文件包含了OpenGL运行所需要调用核心库和实用库中的相关头文件。第2部分为OpenGL绘制图形所需的相关函数的声明和定义,其中主要涉及:设置OpenGL运行初始环境,如myInit函数。绘制所要显示的图形,如myDisplay。响应窗口变化,如myReshape。以上3部分得主要程序结构在所有的win32控制台程序框架中均相似,但每部分在不同的应用中有所不同,要根据实际的绘图需求来具体写相关代码。第3部分为main函数的框架,在初级的应用中main函数调用的函数基本不变,主要是其中的一些参数可根据实际需要进行变动。

//第1部分--在此给出了OpenGL运行所需要的3个头文件

#include "stdafx.h"

#include "windows.h"

#include "GL/glut.h"

//第2部分—OpenGL函数声明

void myInit(void);

void myReshape(GLsizei w,GLsizei h);

void myDisplay(void);

//OpenGL相关函数的定义

void myInit(void) //设置OpenGL运行初始环境

{

glClearColor(1.0,1.0,1.0,0.0); //清除背景颜色为白色

glShadeModel(GL_FLAT); //设置图形绘制模式

}

void myDisplay(void) //绘制所要显示的图形

{

glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓冲区

glColor4f(0.2,0.6,1.0,1.0); //设置图形绘制颜色

glutWireTeapot(0.5); //绘制线框茶壶

glFlush(); //完成绘制

}

void myReshape(GLsizei w,GLsizei h) //响应窗口变化

{

glViewport(0,0,w,h); //设置窗口缩放时的视口变换

}

//第3部分—mian函数框架

int main(int argc, char* argv[])

{ //初始化显示模式,并将窗口显示模式定义为单缓冲区、RGBA颜色glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(50,150); //设置显示窗口左上角位置

glutInitWindowSize(200,350); //设置显示窗口宽度和高度

glutCreateWindow("控制台OpenGL框架"); //创建窗口并设置标题

myInit(); //绘制状态初始化

glutReshapeFunc(myReshape); //当窗口发生变化时,调用myReshape重新定义窗口属性

glutDisplayFunc(myDisplay); //调用myDisplay在窗口中绘制图形

glutMainLoop(); //循环绘制图形和响应事件处理

}

三、基本图元绘制

该部分可参考以下程序完成基本图元的绘制和属性的控制,但要求不能完全照搬,可在历届的基础上进行适当的修改。

#include "stdafx.h"

#include "GL/glut.h"

void myInit(void);

void myReshape(GLsizei w,GLsizei h);

void myDisplay(void);

void myInit(void) //设置OpenGL运行初始环境

{

glClearColor(1.0,1.0,1.0,0.0); //清除背景颜色为白色

glShadeModel(GL_SMOOTH); //设置图形绘制模式

}

void myDisplay(void) //绘制所要显示的图形

{

glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓冲区

glColor4f(0.2,0.6,1.0,1.0); //设置图形绘制颜色

//绘制线段

glBegin(GL_LINES);

glVertex2i(40,60); glVertex2i(-30,36);

glEnd();

//绘制折线

glBegin(GL_LINE_STRIP);

glColor3f(1.0,1.0,0.0); glVertex2f(10.0,-80.0); glVertex2f(30.0,-20.0); //黄色

glColor3f(0.0,1.0,0.0); glVertex2f(40.0,-80.0); glVertex2f(45.0,-20.0); //绿色

glColor3f(0.0,0.0,1.0); glVertex2f(50.0,-80.0); glVertex2f(70.0,-10.0); //蓝色glEnd();

//绘制封闭线

glBegin(GL_LINE_LOOP);

glColor3f(1.0,0.0,0.0); //红色

glVertex2f(-10.0,-30.0); glVertex2f(-30.0,-20.0);

glColor3f(0.0,1.0,0.0); //绿色

glVertex2f(-40.0,-30.0); glVertex2f(-45.0,-20.0);

glColor3f(0.0,0.0,1.0); //蓝色

glVertex2f(-50.0,-30.0); glVertex2f(-70.0,-10.0);

glEnd();

glColor3f(0.0,1.0,0.0); //绿色

//绘制三角形

glBegin(GL_TRIANGLES);

glVertex2i(20,70); glVertex2i(50,80); glVertex2i(60,55); glEnd();

glColor3f(0.0,0.0,1.0); //蓝色

//绘制相连三角形

glBegin(GL_TRIANGLE_STRIP);

glVertex2i(-20,30); glVertex2i(-50,-10); glVertex2i(-60,35);

glVertex2i(-80,45);

glEnd();

//绘制相连的四边形的顶点

glColor3f(0.0,0.0,1.0); //蓝色

glPointSize(3.0);

glBegin(GL_POINTS);

glVertex2i(20,30); glVertex2i(50,-10); glVertex2i(60,35);

glVertex2i(80,45); glVertex2i(85,60); glVertex2i(90,55); glEnd();

glColor3f(1.0,0.0,0.0); //红色

glBegin(GL_QUAD_STRIP);

glVertex2i(20,30); glVertex2i(50,-10); glVertex2i(60,35);

glVertex2i(80,45); glVertex2i(85,60); glVertex2i(90,55);

glEnd();

glFlush(); //强制绘制

}

//此处根据窗口的变化设置视口和裁剪窗口

void myReshape(GLsizei w,GLsizei h)

{

GLfloat nR=100.0f;

if (h==0) //防止被0除

h=1;

glViewport(0,0,w,h); //将视口区设置为原点位于左下角,宽度为w,高度为h

glMatrixMode(GL_PROJECTION); //设置当前投影矩阵堆栈

glLoadIdentity();

//建立裁剪体

if (w<=h)

glOrtho(-nR,nR,-nR*h/w,nR*h/w,-nR,nR);

else

glOrtho(-nR*w/h,nR*w/h,-nR,nR,-nR,nR);

glMatrixMode(GL_MODELVIEW); //设置模型观察矩阵堆栈

glLoadIdentity();

}

绘制屏幕坐标系的2个坐标轴可在myDisplay函数中,按绘制线段的方式指定2个坐标

轴的2对顶点坐标,如(0,0)与(10,0)为x 轴,(0,0)与(0,10)为y 轴。

对于利用线段或多边形绘制函数绘制1个圆,主要的问题是如何计算构成圆周上各个顶

点的坐标值。可利用圆的极坐标方程:

)

1415926.32sin()1415926.32cos(

??=??=N

n

r y N

n

r x

来计算圆周上各点的坐标。其中N 为将圆周等分的份数,n 为每次循环的计数。

注意的问题:

在程序编译、链接、运行均无错误的情况下,经常会出现看不到所绘制的图形的情况,引起该情况的主要可能原因如下: 10.

在使用glVertex 函数指定顶点坐标时,函数的指定参数类型与实际给定的参数类型

不符,如glVertex2f(20,30); 11. 在图形绘制函数如没有Display 中没有调用glFlush(); 进行强制绘制。

12.

在使用glVertex 函数指定顶点坐标值超出glOrtho 或glOrtho2D 所定义的裁剪体范

围。

实验(二):二维图元的几何变换

本实验包含4个环节:

一、了解和掌握二维坐标系中物体坐标、观察坐标、屏幕坐标之间的关系。

在实验一所绘制的基本图元的基础上,通过改变glVertex 函数所指定的顶点位置来理解顶点对几何物体位置和大小的影响;通过改变glBegin 的参数来理解不同基本图元绘制参数与顶点坐标对物体形状的影响;通过改变glOrtho2D 函数中的参数来理解裁剪体范围、是如何指定的及其对显示的场景范围的影响;通过改变glViewport 中的参数,观察所要绘制的图形和视口的位置发生了什么变化,并思考原因。

13.

了解和掌握以坐标原点、坐标轴为中心的物体几何变换方式。

计算机图形学实验内容汇总

计算机图形学实验 肖加清

实验一图形学实验基础 一、实验目的 (1)掌握VC++绘图的一般步骤; (2)掌握OpenGL软件包的安装方法; (3)掌握OpenGL绘图的一般步骤; (4)掌握OpenGL的主要功能与基本语法。 二、实验内容 1、VC++绘图实验 (1)实验内容:以下是绘制金刚石图案。已给出VC++参考程序,但里面有部分错误,请改正,实现以下图案。 N=3 N=4

N=5 N=10 N=30

N=50 (2)参考程序 //自定义的一个类 //此代码可以放在视图类的实现文件(.cpp) 里class CP2 { public: CP2(); virtual ~CP2(); CP2(double,double); double x; double y; }; CP2::CP2() { this->x=0.0; this->y=0.0; } CP2::~CP2() { } CP2::CP2(double x0,double y0) { this->x=x0; this->y=y0; }

//视图类的一个成员函数,这个成员函数可以放在OnDraw函数里调用。 //在视图类的头文件(.h)里定义此函数 void Diamond(); //在视图类的实现文件(.cpp)里实现此函数 void CTestView::Diamond() { CP2 *P; int N; double R; R=300; N=10; P=new CP2[N]; CClientDC dc(this); CRect Rect; GetClientRect(&Rect); double theta; theta=2*PI/N; for(int i=0;i #include #include #include //定义输出窗口的大小 #define WINDOW_HEIGHT 300

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

《高级计算机图形学》实验报告 姓名:学号:班级: 【实验报告要求】 实验名称:高级计算机图形学室内场景 实验目的:掌握使用OpenGL生成真实感复杂对象的方法,进一步熟练掌握构造实体几何表示法、扫描表示法、八叉树法、BSP树法等建模方法。 实验要求:要求利用OpenGL生成一个真实感的复杂对象及其周围场景,并显示观测点变化时的几何变换,要具备在一个纹理复杂的场景中漫游功能。要求使用到光线跟踪算法、 纹理映射技术以及实时绘制技术。 一、实验效果图 图1:正面效果图

图2:背面效果图 图4:背面效果图

图4:室内场景细节效果图 图5:场景角度转换效果图

二、源文件数据代码: 共6个文件,其实现代码如下: 1、DlgAbout.cpp #include "StdAfx.h" #include "DlgAbout.h" 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 "stdafx.h" #include "Tool.h" #include "MainFrm.h" #include "FormCommandView.h" #include "ToolDoc.h" #include "RenderView.h" // Download by https://www.360docs.net/doc/d117707516.html, #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)

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

计算机图形学实验报告,DOC

欢迎共阅

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握 3. 1.利用 2.加强对 四 { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } voidDDALine(intx0,inty0,intx1,inty1) { glColor3f(1.0,0.0,0.0); intdx,dy,epsl,k; floatx,y,xIncre,yIncre; dx=x1-x0;dy=y1-y0;

x=x0;y=y0; if(abs(dx)>abs(dy))epsl=abs(dx); elseepsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glEnd(); } } { } { } { glutInitWindowSize(400,300); glutInitWindowPosition(100,120); glutCreateWindow("line"); Initial(); glutDisplayFunc(Display); glutReshapeFunc(winReshapeFcn); glutMainLoop(); return0; }

计算机图形学实验报告

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。 二、【实验内容】 1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。 三、【测试数据及其结果】 四、【实验源代码】 #include #include #include #include GLsizei winWidth=500; GLsizei winHeight=500; void Initial(void)

{ glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } void DDALine(int x0,int y0,int x1,int y1) { glColor3f(1.0,0.0,0.0); int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glVertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre;

计算机图形学实验二

实验报告 课程名称:计算机图形学 实验项目:区域填充算法 实验仪器:计算机 系别:计算机学院 专业:计算机科学与技术 班级姓名:计科1602/ 学号:2016011 日期:2018-12-8 成绩: 指导教师:

一.实验目的(Objects) 1.实现多边形的扫描线填充算法。 二.实验内容 (Contents) 实现多边形的扫描线填充算法,通过鼠标,交互的画出一个多边形,然后利用种子填充算法,填充指定的区域。不能使用任何自带的填充区域函数,只能使用画点、画线函数或是直接对图像的某个像素进行赋值操作;

三.实验内容 (Your steps or codes, Results) //widget.cpp //2016CYY Cprogramming #include"widget.h" #include #include #include using namespace std; #define H 1080 #define W 1920 int click = 0; //端点数量 QPoint temp; QPoint first; int result = 1; //判断有没有结束 int sign = 1; //2为画线 int length = 5; struct edge { int ymax; float x; float dx; edge *next; }; edge edge_; QVector edges[H]; QVector points;//填充用 bool fin = false; QPoint *Queue = (QPoint *)malloc(length * sizeof(QPoint)); //存放端点的数组 Widget::Widget(QWidget *parent) : QWidget(parent) { } Widget::~Widget() { } void Widget::mouseMoveEvent(QMouseEvent *event) { setMouseTracking(true); if (click > 0 && result != 0) { startPt = temp; endPt =event->pos(); sign = 2; update(); } } void Widget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { } else if (event->button() == Qt::RightButton) { sign = 2;

计算机图形学实验指导书1

佛山科学技术学院计算机图形学实验指导书 李晓东编 电信学院计算机系 2011年11月

实验1 直线段的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1.通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算法及 bresenham算法的基本原理; 2.掌握以上算法生成直线段的基本过程; 3.通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及 bresenham算法对任意直线段的扫描转换。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用DDA算法中点bresenham算法及bresenham算法实现任意给定两点的直线段的绘制(直线宽度和线型可自定)。 实验步骤: 1、复习有关算法的基本原理,明确实验目的和要求; 2、依据算法思想,绘制程序流程图; 3、设计程序界面,要求操作方便; 4、用C/C++语言编写源程序并调试、执行; 5、分析实验结果 6、对程序设计过程中出现的问题进行分析与总结; 7、打印源程序或把源程序以文件的形式提交; 8、按格式要求完成实验报告。 实验报告要求: 1、各种算法的基本原理; 2、各算法的流程图 3、实验结果及分析(比较三种算法的特点,界面插图并注明实验条件) 4、实验总结(含问题分析及解决方法)

实验2 圆的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1、通过实验,进一步理解和掌握中点bresenham画圆算法的基本原理; 2、掌握以上算法生成圆和圆弧的基本过程; 3、掌握在C/C++环境下完成用中点bresenham算法圆或圆弧的绘制方法。实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用中点(Besenham)算法实现圆或圆弧的绘制。 实验步骤 1.复习有关圆的生成算法,明确实验目的和要求; 2.依据算法思想,绘制程序流程图(注意圆弧生成时的输入条件); 3.设计程序界面,要求操作方便; 4.用C/C++语言编写源程序并调试、执行; 5.分析实验结果 6.对程序设计过程中出现的问题进行分析与总结; 7.打印源程序或把源程序以文件的形式提交; 8.按格式要求完成实验报告。 实验报告要求: 1.分析算法的工作原理; 2.画出算法的流程图 3.实验结果及分析(比较圆与圆弧生成算法的不同) 4.实验总结(含问题分析及解决方法)

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

一、实验目的 1、掌握中点Bresenham直线扫描转换算法的思想。 2掌握边标志算法或有效边表算法进行多边形填充的基本设计思想。 3掌握透视投影变换的数学原理和三维坐标系中几何图形到二维图形的观察流程。 4掌握三维形体在计算机中的构造及表示方法 二、实验环境 Windows系统, VC6.0。 三、实验步骤 1、给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、使用中点Bresenham直线扫描转换算法实现自己的画线函数,函数原型可表示如下: void DrawLine(CDC *pDC, int p0x, int p0y, int p1x, int p1y); 在函数中,可通过调用CDC成员函数SetPixel来画出扫描转换过程中的每个点。 COLORREF SetPixel(int x, int y, COLORREF crColor ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用DrawLine 函数画出不同斜率情况的直线,如下图:

最后、调试程序直至正确画出直线。 2、给定多边形的顶点的坐标P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4)…使用边标志算法或有效边表算法进行多边形填充。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、实现边标志算法或有效边表算法函数,如下: void FillPolygon(CDC *pDC, int px[], int py[], int ptnumb); px:该数组用来表示每个顶点的x坐标 py :该数组用来表示每个顶点的y坐标 ptnumb:表示顶点个数 注意实现函数FillPolygon可以直接通过窗口的DC(设备描述符)来进行多边形填充,不需要使用帧缓冲存储。(边标志算法)首先用画线函数勾画出多边形,再针对每条扫描线,从左至右依次判断当前像素的颜色是否勾画的边界色,是就开始填充后面的像素直至再碰到边界像素。注意对顶点要做特殊处理。 通过调用GDI画点函数SetPixel来画出填充过程中的每个点。需要画线可以使用CDC的画线函数MoveTo和LineTo进行绘制,也可以使用实验一实现的画直线函数。 CPoint MoveTo(int x, int y ); BOOL LineTo(int x, int y ); 实现边标志算法算法需要获取某个点的当前颜色值,可以使用CDC的成员函数 COLORREF GetPixel(int x, int y ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用FillPolygon 函数画出填充的多边形,如下: void CTestView::OnDraw(CDC* pDC) { CTestcoodtransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

计算机图形学课程参考文献

《计算机图形学》课程参考文献 [1 Kenneth R. Castleman, “Digital Image Processing”, Prentice-Hall International,Inc, 1996 [2] James Sharman. The Marching Cubes Algorithm[EB]. https://www.360docs.net/doc/d117707516.html,/. [3] William E. Lorensen, Harvey E. Cline. Marching Cubes: A High Resolution 3D Surface Construction Algrorithm[J].Computer Graphics, 1987, 21(4). [4] Jan Horn. Metaballs程序[CP]. http://www.sulaco.co.za. [5] 唐泽圣,等.三维数据场可视化[M].北京:清华大学出版社,1999.177-179. [6] 白燕斌,史惠康,等.OpenGL三维图形库编程指南[M].北京:机械工业出版社,1998. [7] 费广正,芦丽丹,陈立新.可视化OpenGL程序设计[M].北京:清华大学出版社,2001. [8] 田捷,包尚联,周明全.医学影像处理与分析[M].北京:电子工业出版社,2003. [9] 三维表面模型的重构、化简、压缩及其在计算机骨科手术模拟中的应用[R]. https://www.360docs.net/doc/d117707516.html,/~yike/uthesis.pdf ; [10] 首套中国数字化可视人体二维图像[DB]. http://www.chinesevisiblehuman. com/ pic/pictype.asp [11] 季雪岗,王晓辉,张宏林,等.Delphi编程疑难详解[M].北京:人民邮电出版社,2000. [12] 郑启华.PASCAL程序设计(第二版)[M].北京:清华大学出版社,1996. [13] 涂晓斌,谢平,陈海雷,蒋先刚.实用微机工程绘图实验教程[M].西南交通大学出版社,2004,4. [14] David F.Rogers.计算机图形学算法基础[M].北京:电子工业出版社,2002. [15] 李信真,车刚明,欧阳洁,封建湖.计算方法[M].西安:西北工业大学出版社,2000. [16] Paul Bourke Polygonising a scalar field [CP]. http://astronomy. https://www.360docs.net/doc/d117707516.html,.au/ ~pbourke/ modelling/polygonise/ [17] 刘骏.Delphi数字图像处理及高级应用[M].北京:科学出版社,2003. [18] 李弼程,彭天强,彭波,等.智能图像处理技术[M].北京:电子工业出版社,2004. [19] Kenneth R.Castleman著,朱志刚,石定机,等译.数字图像处理[M].北京:电子工业出版社,2002. [20] Milan Sonka, Vaclav Hlavac, Roger Boyle.Image Processing, Analysis, and Machine Vision [M].北京:人民邮电出版社,2003. [21] 阮秋奇.数字图像处理学[M]. 北京:电子工业出版社, 2001. [22] 刘宏昆,等.Delphi应用技巧与常见问题[M]. 北京:机械工业出版社, 2003. [23] 张增强,李鲲程,等.专家门诊—Delphi开发答疑300问[M].北京:人民邮电出版社,2003.6.

《计算机图形学》 课程实验指导(1)

《计算机图形学》课程实验指导 一.实验总体方案 1.教学目标与基本要求 (1)掌握教材所介绍的图形算法的原理; (2)掌握通过具体的平台实现图形算法的方法,培养相应能力; (3)通过实验培养具有开发一个基本图形软件包的能力。 2. 实验平台与考核 实验主要结合OpenGL设计程序实现各种课堂教学中讲过的图形算法为主。程序设计语言主要以C/C++语言为主,开发平台为Visual C++。 每次实验前完成实验报告的实验目的、实验内容、实验原理、实验代码四部分并接受抽查,实验完成后完成实验结果、实验体会两部分,本次实验课结束前提交。 3. 实验步骤 (1) 预习教材与实验指导相关的算法理论及原理; (2) 仿照教材与实验指导提供的算法,利用VC+OpenGL进行实现; (3) 调试、编译、运行程序,运行通过后,可考虑对程序进行修改或改进。 二. 实验具体方案 实验预备知识 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 1)与C语言紧密结合: OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL 作图甚至比TC更加简单; 2)强大的可移植性: 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统。而OpenGL 不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关; 3) 高性能的图形渲染: OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。 总之,OpenGL是一个非常优秀的图形软件接口。OpenGL官方网站(英文)https://www.360docs.net/doc/d117707516.html, 下面将对Windows下的OpenGL编程进行简单介绍。如下是学习OpenGL前的准备工作:1.选择一个编译环境 现在Windows系统的主流编译环境有Visual C++,C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择Visual C++ 作为学习OpenGL的实验环境。 2.安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/d117707516.html,/resources/libraries/glut/glutdlls37beta.zip Windows环境下安装GLUT的步骤: 1)将下载的压缩包解开,将得到5个文件 2)在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则

计算机图形学实验C++代码

一、bresenham算法画直线 #include #include #include void draw_pixel(int ix,int iy) { glBegin(GL_POINTS); glVertex2i(ix,iy); glEnd(); } void Bresenham(int x1,int y1,int xEnd,int yEnd) { int dx=abs(xEnd-x1),dy=abs(yEnd-y1); int p=2*dy-dx; int twoDy=2*dy,twoDyMinusDx=2*dy-2*dx; int x,y; if (x1>xEnd) { x=xEnd;y=yEnd; xEnd=x1; } else { x=x1; y=y1; } draw_pixel(x,y); while(x

} void myinit() { glClearColor(0.8,1.0,1.0,1.0); glColor3f(0.0,0.0,1.0); glPointSize(1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,500.0,0.0,500.0); } void main(int argc,char **argv ) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(200.0,200.0); glutCreateWindow("CG_test_Bresenham_Line example"); glutDisplayFunc(display); myinit(); glutMainLoop(); } 二、中点法绘制椭圆 #include #include #include inline int round(const float a){return int (a+0.5);} void setPixel(GLint xCoord,GLint yCoord) { glBegin(GL_POINTS); glVertex2i(xCoord,yCoord); glEnd(); } void ellipseMidpoint(int xCenter,int yCenter,int Rx,int Ry) { int Rx2=Rx*Rx; int Ry2=Ry*Ry; int twoRx2=2*Rx2; int twoRy2=2*Ry2; int p; int x=0; int y=Ry; int px=0; int py=twoRx2*y; void ellipsePlotPoints(int,int,int,int);

一种基于计算几何方法的最小包容圆求解算法.kdh

2007年 工 程 图 学 学 报2007 第3期 JOURNAL OF ENGINEERING GRAPHICS No.3一种基于计算几何方法的最小包容圆求解算法 张 勇, 陈 强 (清华大学机械工程系先进成形制造重点实验室,北京 100084) 摘要:为实现点集最小包容圆(最小外接圆)的求解,将计算几何中的α-壳的概 念应用到最小包容圆的计算过程,提出了一种精确有效的最小包容圆求解算法。根据α-壳定 义及最小包容圆性质,证明当1/α等于最小包容圆半径时点集的α-壳顶点共圆,1/α小于最小 包容圆半径时α-壳不存在,1/α大于最小包容圆半径时随着1/α减小α-壳顶点数逐渐减小的规 律。将α-壳顶点数目作为搜索最小包容圆半径的依据,实现了最小包容圆半径的搜索和最小包容圆的求解。 关键词:计算机应用;优化算法;计算几何;最小包容圆;α-壳 中图分类号:TP 391 文献标识码:A 文章编号:1003-0158(2007)03-0097-05 Algorithm for Minimum Circumscribed Circle Detection Based on Computational Geometry Technique ZHANG Yong, CHEN Qiang ( Key Laboratory for Advanced Manufacturing by Materials Processing Technology, Department of Mechanical Engineering, Tsinghua University, Beijing 100084, China ) Abstract: α-hulls are applied to calculate the minimum circumscribed circle (MCC) of point set and an accurate and effective method for MCC detection is established through finding the least squares circle of the point set and iteratively approaching the MCC with recursive subdivision. Several theorems concerning the properties of α-hulls are presented. If 1/α is equal to the radius of points’ MCC, all vertices of the α-hull will be on the same circle. When 1/α is larger than the MCC’s radius, the number of vertices of α-hulls will decrease with decreasing of 1/α, and the number of vertices’ number will reach zero when 1/α is smaller than MCC’s radius. From the above rules, an algorithm for detecting MCC is developed, and experimental results show this algorithm is reliable. Key words: computer application; optimized algorithm; computational geometry; minimum circumscribed circle; α-hull 收稿日期:2005-12-20 基金项目:国家自然科学基金资助项目(50275083);高校博士点基金资助项目(20020003053)

计算机图形学实验报告

.

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。 二、【实验内容】 1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。 三、【测试数据及其结果】 四、【实验源代码】 #include

#include #include #include GLsizei winWidth=500; GLsizei winHeight=500; void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } void DDALine(int x0,int y0,int x1,int y1) { glColor3f(1.0,0.0,0.0); int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glV ertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre; y+=yIncre; } } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }

计算机图形学上机实验指导

计算机图形学上机实验指导 指导教师:张加万老师 助教:张怡 2009-10-10

目录 1.计算机图形学实验(一) – OPENGL基础 ..................................... - 1 - 1.1综述 (1) 1.2在VC中新建项目 (1) 1.3一个O PEN GL的例子及说明 (1) 2.计算机图形学实验(二) – OPENGL变换 ..................................... - 5 - 2.1变换 (5) 3.计算机图形学实验(三) - 画线、画圆算法的实现....................... - 9 - 3.1MFC简介 (9) 3.2VC6的界面 (10) 3.3示例的说明 (11) 4.计算机图形学实验(四)- 高级OPENGL实验...................... - 14 - 4.1光照效果 (14) 4.2雾化处理 (16) 5.计算机图形学实验(五)- 高级OPENGL实验........................ - 20 - 5.1纹理映射 (20) 5.2反走样 (24) 6.计算机图形学实验(六) – OPENGL IN MS-WINDOWS .......... - 27 - 6.1 实验目标: (27) 6.2分形 (28)

1.计算机图形学实验(一) – OpenGL基础 1.1综述 这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL提供了完备的支持。 OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。 本次实验不涉及面向对象编程,不涉及MFC。 1.2在VC中新建项目 1.2.1新建一个项目 选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。 1.2.2为项目添加文件 为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib,这三个文件位于c:\program files\microsoft visual studio\vc98\lib目录中。 选中菜单Project->Add To Project->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project->Setting->Link->Object/library Modules 即可。 点击工具条中New Text File按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。 1.3一个OpenGL的例子及说明 1.3.1源程序 请将下面的程序写入源文件Test.c,这个程序很简单,只是在屏幕上画两根线。 #include

计算机图形学实验报告

计算机图形学 实验报告 学号:20072115 姓名: 班级:计算机 2班 指导老师:何太军 2010.6.19

实验一、Windows 图形程序设计基础 1、实验目的 1)学习理解Win32 应用程序设计的基本知识(SDK 编程); 2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构; 5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框); 6)学习使用MFC 的图形编程。 2、实验内容 1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。(可选任务) 2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,This is my first SDI Application"。(必选任务) 3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。 3、实验过程

1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档; 2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,This is my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制; 3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。 4、实验结果 正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。成功地完成了实验。 结果截图: 5、实验体会 通过实验一,了解了如用使用基本的SDI编程函数绘制简单的图

相关文档
最新文档