《计算机图形学》上机实验指导1
计算机图形学上机实验报告
计算机图形学实验报告姓名:学号:班级:目录实验一OpenGL程序结构练习 (3)实验二基本图形生成 (6)实验三交互式控制 (9)实验四图形基本变换 (12)实验五三维图形生成及显示 (15)实验六三维图形生成及显示 (19)实验一OpenGL程序结构练习【实验目的】1.熟悉C语言环境下OpenGL的使用方法;2.了解OpenGL程序的基本结构。
【实验原理】绝大多数OpenGL程序具有类似的结构,包含下述函数main():定义回调函数,打开一个或多个具有指定属性的窗口,进入事件循环(最后一条可执行语句)init():设置状态变量、视图、属性、回调、显示函数、输入和窗口函数#include <GL/glut.h> // glut.h includes gl.h and glu.hvoid display(){ ……}void init(){ ……}int main( intargc, char **argv){ ……}【实验内容】1.了解程序中各个结构的功能;2.用OpenGL生成三角形。
【实验步骤及结果】1.导入OpenGL的glut32.lib和glut.h文件:将.lib文件存放到C 语言程序文件夹的Library下,.h文件放到Include下;导入应用程序扩展文件glut32.dll,存放到system文件夹下。
2.打开VC 6.0,新建工程,并命名为text1,如图1.图 13.在工程text1下新建源文件,并命名为text1.cpp。
4.编写代码并编译链接,如图2所示。
图 25.运行,结果如图3所示。
图 3实验二基本图形生成【实验目的】1.熟悉OpenGL的程序结构,并了解各部分的功能。
2.学会应用OpenGL语言绘制出点,线,多边形。
【实验原理】1.GLUT函数glutInit使得应用程序可以获取命令行参数并初始化系统。
glutInitDisplayMode设置窗口的属性、RGB颜色、单缓冲区、属性按照逻辑或组合在一起。
计算机图形学上机实验指导
计算机图形学上机实验指导指导教师:张加万老师助教:张怡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,回车即可。
《计算机图形学》课程实验指导(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官方网站(英文)下面将对Windows下的OpenGL编程进行简单介绍。
《计算机图形学》实验指导书
计算机图形学实验指导书袁科计算机技术实验中心目录实验一实现DDA、中点画线算法和Bresenham画线算法 (24)实验二实现Bezier曲线 (25)实验三实现B样条曲线 (26)实验四实现多边形填充的边界标志算法 (27)实验五实现裁剪多边形的Cohen-Sutherland算法 (28)实验六二维图形的基本几何变换 (30)实验七画图软件的编制 (31)实验一实现DDA、中点画线算法和Bresenham画线算法【实验目的】1、掌握直线的多种生成算法;2、掌握二维图形显示原理。
【实验环境】VC++6.0/ BC【实验性质及学时】验证性实验,2学时,必做实验【实验内容】利用任意的一个实验环境,编制源程序,分别实现直线的三种生成算法,即数字微分法(DDA)、中点画线法以及Bresenham画线算法。
【实验原理】1、数字微分法(Digital Differential Analyzer,DDA)算法思想:基于直线的微分方程来生成直线。
ε=1/max(|△x|,|△y|)max(|△x|,|△y|)=|△x|,即|k|≤1 的情况:max(|△x|,|△y|)=|△y|,此时|k|≥1:2、中点画线法算法思想:每次在最大位移方向上走一步,另一方向是否走步取决于误差项的判断。
3、Bresenham画线算法算法思想:其基本思想同中点算法一样,即每次在最大位移方向上走一步,而另一个方向是否走步取决于误差项的判断。
【实验要求】1.上交源程序;2.上交实验报告,实验报告内容如下:(1) 实验名称(2) 实验目的(3) 算法实现的设计方法及程序流程图(4) 程序结果分析【分析与思考】(1) 上述所阐述的三个算法,其基本算法只能适用于直线的斜率(|K|<=1) 的情形,如何将上述算法进行推广,使其能够处理任意斜率的直线?(2) 计算机显示屏幕的坐标圆心在哪里,与我们平时的习惯有什么差异,如何协调二者?实验二 实现Bezier 曲线【实验目的】1、掌握Bezier 曲线的定义;2、能编程实现N 次Bezier 曲线的绘制与显示。
计算机图形学实验指导书
《计算机图形学》实验指导书华南农业大学信息学院信息学院章晓华主编目录第一部分《计算机图形学》实验要求 (1)一、《计算机图形学》实验教学概述 (1)1、实验教学的基本情况 (1)2、实验教学的指导思想和教学目的 (1)3、实验项目表 (1)二、《计算机图形学》实验教学规范 (2)1、实验课的意义 (2)2、实验步骤 (2)3、实验报告(文档)规范 (2)4、实验考核 (3)第二部分实验内容 (4)实验一图元的生成算法 (4)实验二多边形填充 (7)实验三二维图形变换 (14)实验四直线Sutherland算法的实现 (22)实验五二维图形系统 (26)第一部分《计算机图形学》实验要求一、《计算机图形学》实验教学概述1、实验教学的基本情况课程总学时数:48学时;课程总学分:3学分实验总学时:16适用专业:信息学院计算机科学与技术、软件工程、网络工程专业,软件学院软件工程专业考核方式及方法:实际操作+程序运行+实验报告。
实验成绩、考勤及书面作业成绩组成平时成绩。
平时成绩占课程总成绩30%,考试成绩占课程总成绩70%。
成绩评定:在参考“难度系数”的基础上>=90——选做内容/必做内容功能完善,编程风格好,人机接口界面好;80~90——必做内容功能完善,完成部分选做内容,编程风格好,人机接口界面良好;70~80——完成必做内容,编程风格良好;60~70——能完成必做内容;<60——未按时完成必做内容,或者抄袭(含雷同者)。
2、实验教学的指导思想和教学目的1)指导思想:掌握计算机图形的生成技术和生成各种平面图形和简单立体图形的基本算法,掌握图形填充、裁剪、图形变换及图形消隐等计算机图形处理的基本方法,初步掌握用C++语言编写基本图形生成和处理程序的方法,为后续的课程奠定良好的基础。
2)教学目的:为了使学生在课程学习的同时,通过在具体的编程环境中的实际操作,对计算机图形学的基本概念和方法能有一个初步的了解,使学生加深了解和更好地掌握《计算机图形学》课程教学大纲要求的内容,并培养学生动手编程解决实际问题的能力,训练学生分析问题和调试程序的能力,锻炼学生撰写科技实验论文的能力。
《计算机图形学》课内实验指导书
“计算机图形学”课内实验指导书杨新宇西安交通大学计算机科学与技术系课程基本情况实验学时:8适用专业:计算机专业本科生先修课程:数据结构,C语言程序设计开课学院:电子与信息工程学院开课学期:第七学期参考书:·DONALD HEARN & M.PAULINE BAKER著,蔡士杰、吴春鎔、孙正兴等译,《计算机图形学(第二版)》,PRENTICE HALL&电子工业出版社,2002年·David F. Rogers主编,《Procedural Elements for Computer Graphics》,机械工业出版社,2002年课程简介本实验是对《计算机图形学》课的课内实践,完成基本几何图形(线、圆、椭圆)的绘制。
教学基本要求与成绩的考核与评定办法一、实验课教学基本要求1.根据题目要求的功能,独立完成,培养自己独立思考、独立解决问题的能力;2.同学之间可以讨论研究问题,互相交流经验体会,但不可照抄;3.记录保存好自己的设计资料数据,调试完成后要写出详细设计报告;4.任务完成后老师要逐个检查验收,并结合实际情况提问答辩。
二、实验成绩的考核与评定办法在实验过程中考察动手能力,依据提交的设计报告、结合验收的实际情况综合打分。
实验项目名称:直线的DDA算法实验目的:1.掌握直线的DDA算法的编程实现。
实验环境:Windows操作系统、VC编程环境。
实验要求:以绘图区域中心为(0,0)点。
要求能够输入任意两个端点的坐标。
实验内容提要:参考《计算机图形学基础》课程中的相关算法流程。
实验类型:设计性。
实验项目名称:直线的Bresenham画线算法实验目的:1.掌握直线的Bresenham算法的编程实现。
实验环境:Windows操作系统、VC编程环境。
实验要求:以绘图区域中心为(0,0)点。
要求能够输入任意两个端点的坐标。
实验内容提要:参考《计算机图形学基础》课程中的相关算法流程。
计算机图形学基础实验指导书
计算机图形学基础实验指导书目录实验一直线的生成 ............................................................... -..2.-实验二圆弧及椭圆弧的生成........................................................ -..3 -实验三多边形的区域填充 ......................................................... - (4)-实验四二维几何变换 ............................................................. -..5.-实验五裁剪算法 ................................................................. -..6.-实验六三维图形变换 ............................................................. -..7.-实验七BEZIER 曲线生成......................................................... -..8.-实验八交互式绘图技术实现........................................................ -..10-实验一直线的生成一、实验目的掌握几种直线生成算法的比较,特别是Bresenham 直线生成算法二、实验环境实验设备:计算机实验使用的语言: C 或Visual C++ 、OpenGL三、实验内容用不同的生成算法在屏幕上绘制出直线的图形,对不同的算法可设置不同的线形或颜色表示区别。
四、实验步骤直线Bresenham 生成算法思想如下1)画点(x i, y i), dx=x2-x i, dy=y2-y i,计算误差初值P i=2dy-dx , i=1;2)求直线下一点位置x i+i=x i+i 如果P i>0,贝U y i+i=y i+i,否则y i+i=y i;3)画点(x i+i ,y i+i );4)求下一个误差P i+i 点,如果P i>0,贝U P i+i=P i+2dy-2dx,否则P i+i=P i+2dy;i=i+i ,如果i<dx+i 则转步骤2,否则结束操作。
计算机图形学实验指导书
计算机图形学实验指导书【】第一章计算机图形学的软件开发环境计算机图形学中的程序都是用C语言编写的,Turbo C和Visual C++常见的两种C语言开发环境,Turbo C是在Dos环境下开发,而Visual C++是在Windows环境下开发。
1.1、在Turbo C环境下开发应用程序一些高级语言都扩充了图形功能,这使得用户可以不需配备专门的图形软件,就能在计算机上进行图形工作。
Turbo C 2.0包含有460多个库函数,其中有 70 多个图形函数,这些函数包括了绘图、处理图象及图素、屏幕及视图区控制、颜色及线型设置、状态查询和出错处理等,这使得 TurboC具有很强的图形功能。
1.图形显示器的工作方式IBM PC 机的显示器可以在两种基本视频方式下工作:一种是文本方式;另一种是图形方式。
( 1 )文本方式在文本方式下,屏幕上可以显示的最小单位是字符,字符在屏幕上以行、列排列,即我们通常见到的情况。
文本方式不同,屏幕上所显示字符的行数和列数也不一样,颜色也会有所区别。
Turbo C 支持 6 种不同的文本显示方式。
( 2 )图形方式在图形方式下,屏幕上可以控制的最小单元称作像素 ( pixel ) ,它是组成图形的基本元素,一般叫作“点”。
通常把屏幕上所包含像素的个数叫做分辨率。
分辨率越高,显示的图形越细致、质量越好,这是显而易见的。
在图形方式下,屏幕上每个像素的显示位置用点坐标系来描述。
在该坐标系中,屏幕左上角为坐标系的原点,坐标值为 ( 0 , 0 ) ; 水平方向为X轴,自左向右;垂直方向为Y轴,自上向下。
见下图。
点坐标系中坐标值的范围决定于所用显示器的分辨率。
分辨率不同,水平方向上和垂直方向上的点数也不同,即其 maxx 、maxy 的数值不同。
就我们常用的 VGA 显示器来说,它通常所用的分辨率为6405480 ,即它的 maxx 值为 639 , maxy 的值为479。
2. 图形函数及其用法Turbo C 的图形函数均在一个头文件“ graphics.h” 中定义。
计算机图形学上机报告
计算机图形学上机实验报告计算机科学与技术学院班级:学号:姓名:指导教师:完成日期:实验一:基本图元绘制一. 实验目的1. 了解如何利用OpenGL库绘制图形2. 理解glut程序框架3. 理解窗口到视区的变换4. 理解OpenGL实现动画的原理二. 实验内容1. 实现中点Bresenham算法画直线2. 实现改进Bresenham算法画直线3. 实现圆的绘制三. 实验结果1.DDA算法画直线2. 中点Bresenham算法画直线3. 改进Bresenham算法画直线4. Bresenham算法画圆四. 源程序#include <windows.h>#include <gl/glut.h>#include "stdio.h"int m_PointNumber = 0; //动画时绘制点的数目int m_DrawMode = 4; //绘制模式 1 DDA算法画直线// 2 中点Bresenham算法画直线// 3 改进Bresenham算法画直线// 4 八分法绘制圆// 5 四分法绘制椭圆//绘制坐标线void DrawCordinateLine(void){int i = 0 ;//坐标线为黑色glColor3f(0.0f, 0.0f ,0.0f);glBegin(GL_LINES);for (i=10;i<=250;i=i+10){glVertex2f((float)(i), 0.0f);glVertex2f((float)(i), 250.0f);glVertex2f(0.0f, (float)(i));glVertex2f(250.0f, (float)(i));}glEnd();}//绘制一个点,这里用一个正方形表示一个点。
void putpixel(GLsizei x, GLsizei y){glRectf(10*x,10*y,10*x+10,10*y+10);}void DDACreateLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num){//设置颜色glColor3f(1.0f,0.0f,0.0f);//对画线动画进行控制if(num == 1)printf("DDA画线算法:各点坐标\n");else if(num==0)return;//画线算法的实现GLsizei dx,dy,epsl,k;GLfloat 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 / epsl ;yIncre = (float)dy / epsl ;for(k = 0; k<=epsl; k++){putpixel((int)(x+0.5), (int)(y+0.5));if (k>=num-1) {printf("x=%f,y=%f,取整后x=%d,y=%d\n", x, y, (int)(x+0.5),(int)(y+0.5));break;}x += xIncre;y += yIncre;if(x >= 25 || y >= 25) break;}}void BresenhamLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num){glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("中点Bresenham算法画直线:各点坐标及判别式的值\n");else if(num==0)return;//画线算法的实现GLsizei dx,dy,d,UpIncre,DownIncre,x,y,xend=0;if(x0>x1){x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;}x=x0;y=y0;dx=x1-x0;dy=y1-y0;d=dx-2*dy;UpIncre=2*dx-2*dy;DownIncre=-2*dy;while (x<=x1){putpixel(x,y);if (x>=num-1) {break;}x++;if(d<0){y++;d+=UpIncre;}else d+=DownIncre;if(x >= 50 || y >= 50) break;}}void Bresenham2Line(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num) {glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("改进的Bresenham算法画直线:各点坐标及判别式的值\n");else if(num==0)return;//画线算法的实现GLsizei x,y,dx,dy,e;dx=x1-x0;dy=y1-y0;e=-dx;x=x0;y=y0;while (x<=x1){putpixel(x,y);if (x>=num-1) {break;}x++;e=e+2*dy;if(e>0){y++;e=e-2*dx;}if(x >= 50 || y >= 50) break;}}void BresenhamCircle(GLsizei x, GLsizei y, GLsizei r, GLsizei num){glColor3f(1.0f,0.0f,0.0f);if(num == 1)printf("Bresenham算法画圆:各点坐标及判别式的值\n");x=0,y=r;GLsizei d=1-r;while (x<y){putpixel(x,y);if (x>=num) {break;}putpixel(y,x);if (x>=num) {break;}putpixel(-y,x);if (x>=num) {break;}putpixel(-x,y);if (x>=num) {break;}putpixel(-x,-y);if (x>=num) {break;}putpixel(-y,-x);if (x>=num) {break;}putpixel(y,-x);if (x>=num) {break;}putpixel(x,-y);if(d<0)d+=2*x+3;else{d+=2*(x-y)+5;y--;}x++;}}//初始化窗口void Initial(void){// 设置窗口颜色为蓝色glClearColor(1.0f, 1.0f, 1.0f, 1.0f);}// 窗口大小改变时调用的登记函数void ChangeSize(GLsizei w, GLsizei h){if(h == 0) h = 1;// 设置视区尺寸glViewport(0, 0, w, h);// 重置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();// 建立修剪空间的范围if (w <= h)glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0);elseglOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0); }// 在窗口中绘制图形void ReDraw(void){//用当前背景色填充窗口glClear(GL_COLOR_BUFFER_BIT);//画出坐标线DrawCordinateLine();switch(m_DrawMode){case 1:DDACreateLine(0,0,20,15,m_PointNumber);break;case 2:BresenhamLine(0,0,20,15,m_PointNumber);break;case 3:Bresenham2Line(1,1,8,6,m_PointNumber);break;case 4:BresenhamCircle(5,5,18,m_PointNumber);break;default:break;}glFlush();}//设置时间回调函数void TimerFunc(int value){if(m_PointNumber == 0)value = 1;m_PointNumber = value;glutPostRedisplay();glutTimerFunc(500, TimerFunc, value+1);}//设置键盘回调函数void Keyboard(unsigned char key, int x, int y){if (key == '1') m_DrawMode = 1;if (key == '2') m_DrawMode = 2;if (key == '3') m_DrawMode = 3;if (key == '4') m_DrawMode = 4;m_PointNumber = 0;glutPostRedisplay();}//void main(void)int main(int argc, char* argv[]){glutInit(&argc, argv);//初始化GLUT库OpenGL窗口的显示模式glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(800,600);glutInitWindowPosition(100,100);glutCreateWindow("基本图元绘制程序");glutDisplayFunc(ReDraw);glutReshapeFunc(ChangeSize);glutKeyboardFunc(Keyboard);//键盘响应回调函数glutTimerFunc(500, TimerFunc, 1);// 窗口初始化Initial();glutMainLoop(); //启动主GLUT事件处理循环return 0;}实验二:日地月模型一. 实验目的1. 理解OpenGL中的变换过程2. 理解透视投影与平行投影的不同3. 了解深度测试二. 实验内容1. 通过变换调整观察的位置与方向2. 实现太阳、地球和月亮的运动模型三. 实验结果太阳、地球和月亮的运动模型图1.图2.图3.四. 源程序#include <windows.h>#include <gl/gl.h>#include <gl/glu.h>#include <gl/glut.h>void Initial(){glEnable(GL_DEPTH_TEST); // 启用深度测试glFrontFace(GL_CCW); // 指定逆时针绕法表示多边形正面glClearColor(1.0f, 1.0f, 1.0f, 1.0f ); //背景为白色}void ChangeSize(int w, int h){if(h == 0) h = 1;// 设置视区尺寸glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();// 设置修剪空间GLfloat fAspect;fAspect = (float)w/(float)h;gluPerspective(45.0, fAspect, 1.0, 500.0);/*if (w <= h)glOrtho (-nRange, nRange, nRange*h/w, -nRange*h/w, -nRange*2.0f, nRange*2.0f);elseglOrtho (-nRange*w/h, nRange*w/h, nRange, -nRange, -nRange*2.0f, nRange*2.0f); */glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void RenderScene(void){// 绕原子核旋转的角度static float fElect1 = 0.0f;static float f2=0.0f;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 重置模型视图矩阵glMatrixMode(GL_MODELVIEW);glLoadIdentity();//将图形沿z轴负向移动glTranslatef(0.0f, 0.0f, -250.0f);// 绘制红色的原子核glColor3f(1.0f, 0.0f, 0.0f);glutSolidSphere(50.0f, 15, 15);// 当前绘制颜色变为黄色glColor3f(0.0f, 0.0f, 0.0f);//绘制第一个电子//保存当前的模型视图矩阵glRotatef(fElect1, 0.0f, 1.0f, 0.0f);//绕y轴旋转一定的角度glTranslatef(80.0f, 0.0f, 0.0f);//平移一段距离glutSolidSphere(12.0f, 15, 15);//画出电子// 恢复矩阵// 第二个电子glPushMatrix();glRotatef(45.0f, 0.0f, 0.0f, 1.0f);glRotatef(f2, 0.0f, 1.0f, 0.0f);glTranslatef(-20.0f, 0.0f, 0.0f);glutSolidSphere(6.0f, 15, 15);glPopMatrix();/* // 第三个电子glPushMatrix();glRotatef(-45.0f,0.0f, 0.0f, 1.0f);glRotatef(fElect1, 0.0f, 1.0f, 0.0f);glTranslatef(0.0f, 0.0f, 60.0f);glutSolidSphere(6.0f, 15, 15);glPopMatrix();*/// 增加旋转步长fElect1 += 10.0f;f2=fElect1*6;if(fElect1 > 360.0f){fElect1 = 10.0f;}glutSwapBuffers();}void TimerFunc(int value){glutPostRedisplay();glutTimerFunc(100, TimerFunc, 1);}int main(int argc, char* argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutCreateWindow("日地月模型");glutReshapeFunc(ChangeSize);glutDisplayFunc(RenderScene);glutTimerFunc(500, TimerFunc, 1);Initial();glutMainLoop();return 0;}。
计算机图形学试验指导书[1]
《电脑图形学》实验指导书傅由甲卢宇编重庆理工大学电脑科学与工程学院2008年10月目录目录 (I)1 OPENGL与三维图形 (1)1.1O PEN GL介绍 (1)1.2O PEN GL函数的语法 (3)1.3O PEN GL是状态机 (4)1.4O PEN GL相关的函数库 (4)1.5O PEN GL的缓冲区 (4)2 MICROSOFT VISUAL C++ 6.0 MFC编程基础 (6)2.1MFC事件驱动简介 (6)2.2MFC事件驱动编程 (6)2.3在VC下实现O PEN GL程序的编译 (12)实验1 WINDOWS操作系统图形开发基础 (13)一、实验要求和目的 (13)二、相关知识提要 (13)三、实验内容及步骤 (15)四、实验习题 (18)实验2 基本光栅图形生成 (20)一、实验要求和目的 (20)二、相关知识提要 (20)三、实验内容及题目 (23)实验3 图形变换 (25)一、实验要求和目的 (25)二、相关知识提要 (25)三、实验内容及步骤 (27)四、实验习题 (28)实验四交互式绘图技术 (29)一、实验要求和目的 (29)二、实验内容及步骤 (29)三、实验习题 (34)实验五光照处理 (35)一、实验要求和目的 (35)二、相关知识提要 (35)三、实验内容及步骤 (38)四、实验习题 (41)实验六纹理映射 (42)一、实验要求和目的 (42)二、相关知识提要 (42)三、实验内容及步骤 (45)四、实验习题 (46)实验七曲面生成 (47)一、实验要求和目的 (47)二、相关知识提要 (47)三、实验内容及步骤 (50)四、实验习题 (55)实验八综合实验〔供优秀学生选做〕 (56)一、实验要求和目的 (56)二、实验内容 (56)三、实验步骤 (56)1 OpenGL与三维图形1.1 OpenGL介绍我们生活在一个充满三维物体的三维世界中,为了使电脑能精确地再现这些物体,必须能在三维空间描绘这些物体。
《计算机图形学》课内实验报告(实验一)
PFNGLUNIFORM1FARBPROC glUniform1fARB;
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
#ifndef __APPLE__
PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
{
GLbyte infoLog[MAX_INFO_LOG_SIZE];
glGetInfoLogARB(progObj, MAX_INFO_LOG_SIZE, NULL, infoLog);
fprintf(stderr, "Error in program linkage!\n");
fprintf(stderr, "Info log: %s\n", infoLog);
// Demonstrates high-level shaders
// Program by Benjamin Lipchak
#include "../../Common/OpenGLSB.h" // System and OpenGL Stuff
#include "../../Common/GLTools.h" // System and OpenGL Stuff
// Initially set the blink parameter to 1 (no flicker)
if (flickerLocation != -1)
glUniform1fARB(flickerLocation,1.0f);
// Program object has changed, so we should revalidate
《计算机图形学》实验指导书(正式版)
《计算机图形学》实验指导谢晓玲华东理工大学信息学院计算机系2010年8月目录实验1 OpenGL应用的创建 (2)实验2 橡皮筋技术的实现 (17)实验3 基本变换 (24)实验4 拾取 (41)实验5 三维观察的实现 (54)实验1 OpenGL应用的创建一、实验目的1、了解C++.NET开发基于窗口技术的应用程序的步骤;2、了解OpenGL绘图的步骤;3、显示一个三角形图形。
二、使用的工具软件及环境C++.NET、OpenGL三、实验内容1、构造一个单文档的Windows应用程序2、定义一个填充图案;3、通过菜单,交互控制填充开关;4、显示一个填充的三角形图形。
四、实验指导1、基本要素(1)C++.NET程序设计框架C++.NET提供了一套应用程序框架,应用程序框架是指用于生成一般的应用程序所必须的各种面向对象的软件组建的集合。
C++程序设计的特点之一就是大量使用类库来进行功能扩展。
类库是一个可以在应用程序中使用的相互关联的C++类的集合。
一些类库是随编译器一起提供的,一些是由其他软件公司销售的,还有一些是由用户自己开发的。
应用程序框架是一种类库的超集,它用来定义程序的结构,将其他的类库,例如文档类、视图类及用户自定义类等,嵌入到应用程序框架中,以完成用户预期的功能。
通过定制,C++.NET 可以自动生成一套程序代码,以单文档多视风格的应用程序为例,自动生成的源代码主要包含应用程序类、主框架类、文档类、视口类。
以MyDemo为工程名,C++.NET自动生成的类如下:A.class CMyDemoApp: public CWinAppCMyDemoApp的对象就代表了一个应用程序。
该程序定义了一个单独的全局CMyApp对象theApp:CMyDemoApp theApp;其基类决定了theApp的行为,包括程序的启动、初始化和运行等。
B.class CMainFrame : public CFrameWnd它代表了应用程序的主框架窗口,它负责创建和显示具体的窗口结构,并负责消息的分发。
计算机图形学课程实验指导书和作业
《计算机图形学》实验指导书、作业学期:2011-2012(2)班级:测绘工程10-1班姓名:汪帅学号:20100202测绘工程学院目录实验一直线段生成算法实现 (1)实验二圆生成算法的实现 (5)实验三二维图形几何变换的实现 (8)实验四直线段裁剪算法的实现 (13)实验报告1 (19)实验报告2 (26)实验报告3 (30)实验报告4 (37)实验一 直线段生成算法实现一、实验目的熟练掌握DDA 直线生成算法、中点直线生成算法、Bresenham 直线生成算法的算法思想,了解各个算法中寻找直线段上的像素点的过程。
二、实验学时 2学时三、实验类型现代实验、验证性、自立式四、实验要求1.根据指导书所给的参考代码,每人至少实现两种直线段的生成算法。
2.要求能够实现任意起始点和终止点坐标的直线段的绘制。
3.能够实现不同线型(实线、虚线、点划线)、不同线宽(单像素宽度、多像素宽度)的直线段的绘制。
五、实验原理与步骤 原理:1.数值微分法(DDA )设一直线段的起点和终点坐标分别为(xs , ys)和(xe , ye)。
则直线段在X 和Y 方向的增量分别为: △x=xe- xs ,△y= ye- ys 设△t=max(|△x|,|△y|)取时间步长为1/△t,若当前像素点坐标为(xi, yi),则下一个像素点的坐标可由以下两式确定: xi+1=xi+dx=xi+Dx/Dt yi+1=yi+dy=yi+Dy/Dt 2.中点直线生成算法:假定直线斜率0<m<1,且已确定点亮象素点P (Xi ,Yi ),则下一个与直线最接近的像素只能是P1点或P2点。
设M 为中点,Q 为交点,现需确定下一个点亮的象素。
当M 在Q 的下方-> P2离直线更近更近->取P2 。
M 在Q 的上方-> P1离直线更近更近->取P1 M 与Q 重合, P1、P2任取一点。
假设直线方程为:ax+by+c=0 其中a=y0-y1, b=x1-x0, c=x0y1-x1y0 F(x,y)=0 点在直线上面 F(x,y)>0 点在直线上方 F(x,y)<0 点在直线下方欲判断M 点是在Q 点上方还是在Q 点下方,只需把M 代入F(x,y),并检查它的符号。
实验指导书-计算机图形学
《计算机图形学》实验指导书《计算机图形学》实验指导书目录目录 (1)概述 (2)实验1 熟悉实验环境 (3)1.1 实验要求和目的 (3)1.2 实验课时 (3)实验2 直线的生成 (4)2.1 实验要求和目的 (4)2.2 实验课时 (4)2.3 实验环境 (4)2.4 实验平台简介: (4)2.5 思考题(选做) (5)实验3 多边形扫描转换算法 (7)3.1 实验要求和目的 (7)3.2 实验课时 (7)3.3 实验环境 (7)3.4 实验平台简介: (7)实验4 BSpline曲线绘制 (10)4.1 实验要求和目的 (10)4.2 实验课时 (10)4.3 实验环境 (10)4.4 实验平台介绍 (10)实验5 光照模型(Illumination Model) (13)5.1 实验要求和目的 (13)5.2 思考题 (13)5.3 实验课时 (13)5.4 实验环境 (13)5.5 实验平台介绍 (13)附录A:实验报告 (17)概述(1)实验概述运用某种程序设计语言设计并实现计算机图形学的直线、曲线、简单多面体(四面体)等基本图形元素的表示和绘制,以检验和巩固计算机图形学中的基本知识、加深对本课程原理、方法和技术的理解,锻炼和培养学生实际操作技能和解决实际问题的能力,使学生熟悉解决实际问题的过程。
(2)实验目的和要求实验目的是检验和巩固所学知识与方法,通过实现基本图形元的表示和绘制过程,理解并掌握计算机图形学的原理、方法和技术,并灵活运用它们解决实际问题。
要求理解各实验相关的原理和实现方法,通过这些实验的训练,加深对课程中原理、方法和技术的理解,验证和巩固计算机图形学中的基本知识,锻炼和培养学生熟悉图形编程环境,理解课程中基本问题的求解算法和性能改进方法,并对结果进行充分测试。
(3)主要原理与概念一般来说,计算机图形学的基本内容包括图形的表示(如三维形体的表示,曲线、曲面的表示等)、图形变换和观察、图形生成(基本图形生成,消隐、真实感绘制等)三个方面,涉及大量数据结构、算法。
《计算机图形学》实验指导书
《计算机图形学》实验指导书实验一:二维基本图元的生成1、实验目的:参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维基本图元的生成。
实现二维基本图元直线段生成的DDA算法,中点算法、Bresenham算法。
2、实验内容:用数值微分DDA算法、中点算法、Bresenham算法扫描转换直线段(20,10)--(30,18)3、实验要求:1)写出扫描转换的结果2)写出每一步递推过程的x,y坐标及判别式d的值3)图示计算结果4)考虑实现环境、编程语言和设计界面风格5)用菜单或按钮调用方式实现每个基本算法6)考虑界面的美观,扩展,人机交互等因素7)调试程序,验证算法的正确性8)提交实验报告4、参考:教材,开发平台的联机帮助。
演示参考:DDA算法:斜率k=(5-1)/(5-0)=0.8x y y+0.5 int(y+0.5)0 1 1.5 11 1.8 2.3 22 2.6 3.1 33 3.4 3.9 34 4.2 4.7 45 5.0 5.5 5中点算法:a=y0-y1=-4;b=x1-x0=5; d0=2a+b=-3; d1=2a=-8; d2=2(a + b) =2;x y d 说明0 1 -31 2 -1; d<0, d+d22 3 1; d<0, d+d23 3 -7; d>0, d+d14 4 -5; d<0, d+d25 5 -3; d<0, d+d2 结果图示:实验二:写一个画带线宽的程序。
1、实验目的:参照Windows的画笔或Office中的绘图模块设计学会自己编程实现二维基本图元的生成2、实验内容:实现对线宽的属性的控制3、实验步骤:1)考虑实现环境、编程语言和设计界面风格2)调用菜单或按钮调用方式实现每个基本算法3)考虑界面的美观,扩展,人机交互等因素4)键盘输入直线的两个端点坐标及线宽的倍数,调用算法实现5)调试程序,验证算法的正确性6)提交实验报告4、参考:教材,开发平台的联机帮助。
计算机图形学实验指导(一、二)
电脑图形学实验指导实验一、直线的扫描转换算法实验实验目的掌握中点Bresenham直线扫描转换算法的思想。
实验环境实验内容问题描述:给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。
中点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函数画出不同斜率情况的直线,如下列图:最后、调试程序直至正确画出直线。
实验要求1写出中点Bresenham直线扫描转换算法的程序并在vc6下编译和调试通过,画出具有各种斜率范围的直线(仅使用GDI函数SetPixel函数)。
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〔设备描述符〕来进行多边形填充,不需要使用帧缓冲存储。
计算机图形学实验指导书
超级链接
不论文字或图形,都可加上超级链接,一个完整网站,至少包括 以下两种链接。 1 、站内链接:若网站规划多个主题板块,必须在首页加入超级链接。
2 、站外链接:外部链接到internet。
页面的创建和保存
创建新空白页面 打开一个已存在的HTML文件 注意:不能直接将WORD文档(.doc)导入Dreamweaver中,必须先在word 中将文件保存为HTML文件格式,再在Dreamweaver中导入。 基于模板创建新页面 (1)文件—新建,切换到“模板”选项卡 (2)在对话框中选择一个模板,单击“创建” 当基于模板创建文档时,文档某些部分可能被锁定,不许修改,以 保证在站点中不同文档的一致性,文档可编辑区,输入所需要的内容。 保存文件 默认文件类型为.htm 或.html
动画效果较电影和电视的要求低,放映速度系统缺省只有 1/12秒。
2、 flash MX中动画文件的结构 flash结构也分多层:
flash MX文件(影片) 一个或多个场景 多个实例。(举例说明) 一帧或多帧 一个或多个图层 一个或
3、 舞台和工作区
创作影片中各个帧的内容的区域,可以在其中直接勾画插图或导入插图。
图层技术
图层与几何变形:延伸线 1.FLA 图层与图形组件: 4球体移动.FLA 图层实现文字动画 文字飞入特效 .fla
引导线技术
基本:5引导球体移动 .FLA 高级:
注意:在拖动中一定要使小球的中心位置在曲线上,才能使小球 按指定的轨迹运动,运动的轨迹并不显示出来。
遮蔽图层技术
基本:6遮蔽.FLA 高级:放大镜 .FLA
为了照顾网页的下载速度,一般很少使用背景图片,而是给网页加上背景颜色。
网页的文字色彩 网页的边距 网页语种 网页蓝图 图片的透明度 默认为 0 ,不透明度是 100 。
《计算机图形学》实验指导书
3、务必掌握绘图程序的开发流程,为今后复杂的图形程序开发做好准备。
四、实验内容
(一)生成绘图应用程序的框架
开发绘图应用程序的第一步是使用AppWizard(程序生成向导)来建立程序的基本框架。AppWizard为框架的建立提供了一系列对话框及多种选项,用户可以根据不同的选项生成自己所需要的应用程序框架。具体步骤如下:
五、思考
1、如何实现圆心为任意位置的圆的绘制;
2、两种画圆算法的比较。
六、实验总结
湖北汽车工业学院实验报告
班级
学号
姓名
课程名称
完成日期
实验四 实现Bezier曲线的生成算法
一、实验目的
1、熟悉CDC图形程序库;
2、掌握Bezier曲线的生成算法;
3、掌握利用Bezier曲线生成复杂形状的曲线;
五、思考
1、MFC开发绘图程序时,工作窗口坐标系是怎么样的,坐标原点在哪儿?
2、实现任意斜率直线生成问题时,能不能使用模块化的思想,即将各个画线算法程序进一步分解,通过不同的函数来完成不同斜率的生成?
3、三种不同的直线生成算法的分析和比较。
六、实验总结
湖北汽车工业学院实验报告
班级
学号
姓名
课程名称
完成日期
pDC->SetPixel(-y+x0,x+y0,RGB(255,0,0));
pDC->SetPixel(-x+x0,y+y0,RGB(255,0,0));
}
}
2、利用Bresenham算法生成圆(算法的详细原理见教材)。
void CDraw_CirView::OnBre()
计算机图形学上机实验指导
计算机图形学上机实验指导指导教师:张加万老师助教:张怡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,回车即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
KMUSTTeaching Records昆明理工大学《上机实验指导书》课程名称:计算机图形学所在系(部):国资院测绘系学年学期: 2012 — 2013 学年第 2 学期授课专业班级:地信101/土管101/测绘101 班级人数: 27/24/56 讲授教师:李向新教材名称:计算机图形学课程总学时: 64 ;总学分:理论学时: 38 ;实验(或实践)学时: 上机学时: 32 ;辅导(或答疑)学时: 系主任签章:第1部分计算机图形学上机实验大纲1.1 目的与任务计算机图形学上机是计算机图形学课程的组成部分之一,是掌握计算机图形学课程内容的一个重要实践环节。
通过上机实验,一方面可以让学生巩固课堂所学的计算机图形学基础理论,另一方面能让学生掌握基本的OpenGL的编程方法及技能,掌握使用OpenGL绘制基本图形,进行2D及3D维图形变换,生成曲线曲面及构建具有真实感的3D场景。
1.2 基本要求1. 了解OpenGL在计算机图形学中的应用基础知识。
2. 掌握基本的OpenGL的编程方法及技能。
3. 学会使用OpenGL绘制基本图形。
4. 学会使用OpenGL进行2D及3D维图形变换、生成曲线曲面及构建具有真实感的3D场景。
1.3 内容及学时安排上机1:glut工具包的安装及使用 2学时上机2:OpenGL编程练习 2学时上机3:OpenGL中基本几何图形的绘制 2学时上机4:二维图形变换编程练习 2学时上机5:交互式绘图技术编程练习 2学时上机6:三维图形变换编程练习 2学时上机7:OpenGL三维物体表示编程练习 2学时上机8:真实感图形的生成与处理上机 2学时合计 16学时1.4 教学参考书(1) 成思源等编著:计算机图形学,冶金工业出版社,2003.(2) (美)安杰尔(Edward Angel)著;李桂琼,张文祥译: OpenGL程序设计指南(第二版),北京:清华大学出版社,2005.(3) Edward Angel: Interactive Computer Graphics—A Top-Down Approach withOpenGL, Third Edition, Pearson Education, Inc., 2003.(4) F.S. Hill, JR:Computer Graphics Using OpenGL Second Edition, PearsonEducation, Inc., 2003.(5) James D. Foley et al.: Computer Graphics—Principles and Practice, SecondEdition in C, Pearson Education, Inc., 2002.(6) 朱家义:Visual C++程序设计,机械工业出版社,2003。
(7) 和平鸽工作室编:三维图形系统—开发与实用技术,清华大学出版社,2003.第2部分上机实验指导内容及参考代码2.1上机1:glut工具包的安装及使用(2学时)1.目的要求:熟悉OpenGL的应用工具包GLUT的安装和使用。
2.实验内容:在VC++6.0环境中,编写一程序绘制GLUT中的三维茶壶模型,并上机运行。
3.主要仪器设备及软件PC计算机, VC++6.0,GLUT库4、内容及要求1)下载和安装GLUT工具。
见附注(1)、(2)。
2)编写一程序绘制GLUT中的三维茶壶模型。
目的在于理解和体会在VC++6.0环境下OpenGL编程的基本步骤。
见附注(3)3)工程名称和C++源文件名称为teapot_学生姓名(中文)(如teapot_徐航)。
4)编译、连接、运行完成后将工程文件(扩展名为.dsp的文件)和程序源文件(扩展名为.cpp 的文件)打包压缩(压缩包的文件名为你的班级姓名学号,如:GIS101徐航200810103106)。
将压缩后的文件发给学委,学委再将全班的收集后打包压缩,发送至lxxjpn@。
邮件主题名称为上机一班级姓名(如:上机1_GIS101)。
附注(1):关于OpenGLOpenGL(“Open Graphics Library”)是图形硬件的软件接口。
OpenGL包括大约250个不同的函数,程序员可以使用这些函数设定要绘制的物体和操作,来制作交互的三维应用程序。
OpenGL 是专业图形处理,科学计算等高端应用领域的标准图形库。
它的主要竞争对手是微软的Direct3D。
OpenGL曾长期处于技术上的领先地位,但近年来Direct3D也迎头赶上。
目前这两种图形API在性能上可说是旗鼓相当。
不过OpenGL支持众多的操作系统,而Direct3D只在Windows 平台上可用。
因此OpenGL仍然广受瞩目。
你可以在OpenGL的官方网站的Documentation中下载到官方教程和例子程序:The OpenGL Programming Guide,这就是著名的red book(“红皮书”)。
如果你英语不好,那么推荐你阅读: 《OpenGL超级宝典》是一本相当不错的中文教程。
可以在/forumdisplay.php?fid=29找到它的例子代码《OpenGL编程权威指南》是red book的中文译本,它的例子也就是red book的例子。
附注(2):怎样安装GLUT库?OpenGL的例子大都需要用到OpenGL应用工具包:GLUT库,下面讲讲怎样安装它:Windows下VC++ 6.0下的安装:1. 下载GLUT库:/resources/libraries/glut/glutdlls37beta.zip2. 将压缩包内的glut.h放到C:\Program Files\Microsoft V isual Studio\VC98\Include\GL目录下glut32.lib放到C:\Program Files\Microsoft V isual Studio\VC98\Lib目录下glut32.dll放到C:\windows\systom32目录下。
附注(3):Windows下的VC++环境中创建简单的OpenGL程序基本过程(设所要创建的文件名为ex1)完成GLUT库的安装后,在VC++6.0环境下创建一个OpenGL程序并运行:1)打开VC++应用程序,在主菜单的“文件(File)”菜单下选择“新建(New )”选项。
这时会弹出一个窗口,在弹出的窗口中选择“文件(Files)”卡。
2)在“文件(Files)”卡的窗口中选择C++Source File。
在右边健入要建立的文件名(如ex1),并选择存储路径,(如D:\ ),完成后按确定,进入源代码编辑窗口。
注意,为了使生成的文件不会搞乱,最好事先在D盘下创建一个文件夹(如D:\EX1),保存exl 文件。
3)在源代码窗口内写入程序源代码。
4)完成后按Ctrl+F7(Link),这时VC++会提示你是否创建工程,请选择是(yes),则自动建立工程文件ex15)在编译连接之前,先进入主菜单的“工程(Project)”菜单,选中Settings,设置工程的编译和和连结选项。
6)在Project Setting 对话框中,选“连结(Link)”卡,在改选项卡中的“Objiect\library modules”一栏中加入opengl32.lib、glu32.lib、glut32.lib这三个OpenGL的连接库。
单击OK按钮,此工程文件就可以在OpenGL要求的环境中进行编译了。
7)在Build菜单中选中Compile或Build进行编译连接。
8)选中Build菜单中的Execute执行。
5、参考代码#include<windows.h>#include<gl/glut.h>/*背景颜色设置函数*/void ini(){glClearColor(1.0,1.0,1.0,1.0); //设置背景颜色为白色}/*绘制茶壶的线框图函数*/void RenderScene(void){glClear(GL_COLOR_BUFFER_BIT); //用设定的颜色来刷新指定的缓冲区glColor4f(0.0,0.0,1.0,1.0); //设置作图颜色为蓝色glutWireTeapot(0.5); //绘制一个茶壶的线框图glFlush(); //刷新OpenGL中的命令队列和缓冲区,使所有未被执行的OpenGL命令得到执行}void main(int argc, char**argv){glutInit(&argc,argv); //初始化GLUT库glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //设置窗口显示为单缓冲RGB颜色模式glutInitWindowSize(600,600); //设置窗口大小为600*600glutInitWindowPosition(100,100); //设置窗口左上角坐标为(100,100)glutCreateWindow("Teapot"); //窗口名称为Teapotini(); //调用函数ini()设置背景为白色glutDisplayFunc(RenderScene); //调用绘制茶壶的线框图函数glutMainLoop(); //开始运行程序}2.2 上机2:OpenGL编程初步练习(2学时)1.目的要求:熟悉OpenGL中基本几何图形点和线的绘制方法。
2.实验内容:完成综合练习三中7题的上机作业。
3.主要仪器设备及软件PC计算机, VC++6.0,GLUT库4. 上机内容及要求编写一个程序,在蓝色窗口中绘制一红色的正方形,且正方形大小可随窗口尺寸改变而调整。
(代码可参考教科书p305的内容。
)2.3 上机3:OpenGL中基本几何图形的绘制(2学时)1.目的要求:熟悉OpenGL中多边形的绘制及填充方法。
2.实验内容:在VC++6.0环境中编写一程序,用不同的方式绘制多边形,并上机运行。
3.主要仪器设备及软件PC计算机, VC++6.0,GLUT库4. 参考代码#include<windows.h>#include<GL/glut.h>void myinit(void){/*设置背景颜色*/glClearColor(1.0,1.0,1.0,0.0);}void DrawPolygon(){glBegin(GL_POLYGON);glV ertex2f(20.0,10.0);glV ertex2f(60.0,30.0);glV ertex2f(70.0,45.0);glV ertex2f(40.0,75.0);glV ertex2f(10.0,60.0);glEnd();}void display(void){GLubyte fly[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x01,0xC0,0x06,0xC0,0x03,0x60,0x04,0x60,0x06,0x20,0x04,0x30,0x0C,0x20,0x04,0x18,0x18,0x20,0x04,0x0C,0x30,0x20,0x04,0x06,0x60,0x20,0x44,0x03,0xC0,0x22,0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,0x66,0x01,0x80,0x66,0x33,0x01,0x80,0xCC,0x19,0x81,0x81,0x98,0x0C,0xC1,0x83,0x30,0x07,0xe1,0x87,0xe0,0x03,0x3f,0xfc,0xc0,0x03,0x31,0x8c,0xc0,0x03,0x33,0xcc,0xc0,0x06,0x64,0x26,0x60,0x0c,0xcc,0x33,0x30,0x18,0xcc,0x33,0x18,0x10,0xc4,0x23,0x08,0x10,0x63,0xC6,0x08,0x10,0x30,0x0c,0x08,0x10,0x18,0x18,0x08,0x10,0x00,0x00,0x08};glClear(GL_COLOR_BUFFER_BIT);/*设置线段的颜色*/glColor3f(0.0,0.0,0.0);/*第一个多边形采用点绘制*/glPolygonMode(GL_FRONT,GL_POINT);glTranslatef(20.0,10.0,0.0); //平移DrawPolygon();/*第二个多边形采用线绘制*/glPolygonMode(GL_FRONT,GL_LINE);glTranslatef(90.0,0.0,0.0); //平移DrawPolygon();/*第三个多边形采用填充模式绘制*/glPolygonMode(GL_FRONT,GL_FILL);glTranslatef(90.0,0.0,0.0); //平移DrawPolygon();/*第四个多边形为逆时针方向,并舍弃其背面*/glFrontFace(GL_CW); //指定多边形的正面,GL_CK顺时针正面glCullFace(GL_BACK); //指明何种多边形在转换成屏幕坐标时要删除,GL_BACK背面,cull选择glEnable(GL_CULL_FACE); //激活GL_CULL_FACEglTranslatef(-190.0,80.0,0.0);DrawPolygon();/*第五个多边形采用画模式绘制*/glFrontFace(GL_CCW); //指定多边形的GL_CCK逆时针反面glEnable(GL_POLYGON_STIPPLE); //激活GL_POLYGON_STIPPLEglPolygonStipple(fly);glTranslatef(90.0,80.0,0.0);DrawPolygon();glFlush();}void myreshape(int w,int h){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);}int main(int argc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(300,300);glutInitWindowPosition(150,150);glutCreateWindow("Polygon");myinit();glutDisplayFunc(display);glutReshapeFunc(myreshape);glutMainLoop();return 0;}2.4 上机4:二维图形变换编程练习(2学时)1.目的要求:熟悉OpenGL中多边形的绘制及填充方法。