图形学教案ch2.ppt.Convertor_计算机图形学教案
图形学教案ch2.ppt.Convertor由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“计算机图形学教案”。
计算机图形学第二章 Turbo C的图形功能
第二章
Turbo C 的图形功能
图形显示器的两种显示模式:
文本模式和图形模式
在文本方式下,屏幕上可显示的最小单位是字符。文本方式设置不同,可显示的字符的列数、行数也不相同(在一般缺省方式下,为25行、80列),颜色也有所区别。
在图形方式下,屏幕上可以控制的单位叫做像素,它是组成图形的基本元素,一般也成为“点”。分辨率越高,屏幕上包含的像素个数就越多,显示的图形越细,质量就越好。
屏幕上每个像素的位置可以用该像素在屏幕坐标系中的坐标进行描述。
屏幕坐标系是一个左手系,屏幕左上角为坐标系的原点(0,0),水平方向为X轴,自左向右;垂直方向为Y轴,自上而下。坐标范围与显示器的分辨率有关,例如,当分辨率为640×480时,左上角坐标为(0,0),右下角坐标为(639,479)。
一、图形初始化及应用设置函数
因为在文本方式下不能显示图形,所有的图形函数均不能操作,因此在使用图形函数进行绘图之前,必须将显示适配器设置为图形模式,即通常所说的“图形模式初始化”。在绘图结束之后,又要让适配器的设置回到文本模式。Turbo C提供了14个函数,进行图形系统的控制和管理工作。最常见的两个函数是:
1、初始化图形系统函数
void far initgraph(gdrive,gmode,gpath)int far *gdrive, *gmode, *gpath;gdrive:图形驱动器代号,gmode:图形模式代号,gpath: 图形驱动程序路径。如:常用方式:
int gdrive,gmode;gdrive=DETECT;initgraph(&gdrive,&gmode, “d:tc”);
2、释放图形系统所分配的内存、恢复屏幕原显示模式函数
void far closegraph(void)调用形式:closegraph();
二、屏幕管理函数
1、擦除整个图形屏幕,并将cp(当前位置)移到原点(0,0)
void far cleardevice(void)
2、建立视区
void setviewport(x1,y1,x2,y2)
3、清除视图区
清除视图区用函数clearviewport。它的作用是清除掉当前的视图区,将当前点的位置重新设
1/7
计算机图形学第二章 Turbo C的图形功能
置为屏幕左上角(0,0)。其调用格式为:
clearviewport();
三、常用的作图函数
1、画点函数
putpixel(int x, int y, int color)
2、以当前颜色、线型、宽度画直线函数
void line(x0, y0, x, y)
int x0, y0, x, y;从(x0,y0)画到(x,y)。
3、以当前颜色、线型、宽度画直线函数
void far lineto(int x, int y)从当前点(cp)画到(x,y)。
4、得到当前位置坐标函数
(1)int far getx(void)
返回x坐标
(2)int far gety(void)
返回y坐标
5、以当前颜色、线型、线宽画一矩形函数
void far rectangle(left, top, right, bottom)int left, top, right, bottom;
6、以当前填充模式、填充颜色画一矩形函数
void far bar(left, top, right, bottom)int left, top, right, bottom;
7、以当前填充模式、填充颜色画一多边形函数
void far fillpoly(int num, int a[ ])num:顶点数;
a[ ]:存放各顶点坐标,共num*2个数;若是封闭的,则有num+1个点,有(num+1)*2个数。
8、以当前颜色、线型、线宽画圆函数
void far circle(int x, int y, int radius)x, y:圆心坐标; radius:半径。
9、以当前颜色、线型、线宽画椭圆弧函数
void far ellipse(x, y, stangle, endangle, xradius, yradius)int x, y, stangle, endangle, xradius, yradius;x, y:椭圆中心坐标;
endangle, endangle:画椭圆的起始角和终止角。若endangle=0, endangle=360,则画一完整椭圆。
xradius,yradius:为x、y方向的轴长半径。
10、以当前颜色、线型、线宽及填充模式、填充颜色画扇形函数
void far piselice(x, y, stangle, endangle, radius)若stangle=0, endangle=360,则画一完整圆。
2/7
计算机图形学第二章 Turbo C的图形功能
四、图形属性控制函数
1、得到背景颜色数值函数
int far getbkcolor(void)常调用形式: oldbkcolor=getbkcolor();
2、得到当前绘图颜色数值函数
int far getcolor(void)常调用形式: oldcolor=getcolor();
3、设置背景颜色函数
void far setbkcolor(int color)调用形式如: setbkcolor(BLUE);
(兰色背景)
4、设置当前绘图颜色函数
void far setcolor(int color)调用形式如: setcolor(RED);
(红色绘图颜色)
5、获得最大颜色数函数
int far getmaxcolor(void)调用形式如: maxclor= getmaxcolor();关于颜色值、符号常量与颜色的对应关系 符号常量
数值
颜色 BLACK
0
BLUE
GREEN
CYAN
青 RED
MAGENTA
品红 BROWN
棕色 LIGHTGRAY
灰白 DARKGRAY
灰 LIGHTBLUE
LIGHTGREEN
LIGHTCYAN
浅青 LIGHTRED
LIGHTMAGENTA浅品红(淡紫色)YELLOW
WHITE
例
1、用16种不同的颜色显示16条不同的线段 #include“graphics.h“
/*hhj01.c*/ main(){ int gdriver=DETECT,gmode;int i,y=0;initgraph(&gdriver,&gmode,”d: urboc2“);for(i=0;i
3/7
计算机图形学第二章 Turbo C的图形功能
{ setcolor(i);line(10,10+y,100,10+y);y+=5;} getch();closegraph();}
例、用直线生成(直纹)曲面
#include”graphics.h“
/*pattern.c*/ main(){ int y;long x;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,“d: urboc2”);cleardevice();setbkcolor(9);setcolor(4);for(y=0;y
x=320/240*y;
line(0,y,x,240);
}
getch();
closegraph();
}
6、设置画线宽度和线型的函数
void far setlinestyle(linestyle, upattern, thickne)
int linestyle, thickne;
unsigned upattern;linestyle(线型)取值,0:实线,1:点,2:长短,3:长虚线,4:自定义线型。thickne(宽度)取值: 1、3。
upattern:当linestyle为4时起作用。其他4种预定义情况可取0。例、显示turbo c固有的画线模式 /*line_style01.c*/ #include“graphics.h” main(){ int i,y=0,gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,“d: urboc2”);for(i=0;i
4/7
计算机图形学第二章 Turbo C的图形功能
setcolor(i+1);setlinestyle(i,0,1);line(10,100+y,100,100+y);y+=5;} getch();closegraph();}
例、用自定义线形画线。/*line_style02.c*/ #include“graphics.h” main(){ int gdriver=DETECT,gmode;unsigned upattern=0XEBAE;initgraph(&gdriver,&gmode,“d: urboc2”);setcolor(1);setlinestyle(4,upattern,3);rectangle(100,100,300,300);getch();closegraph();}
7、设置着色(填充)模式和颜色函数
void far setfillstyle(int pattern, int color)pattern(着色模式)取值: 0:用背景颜色填充,1:用纯色填充,2~12:用各种线型和色点填充。
color: 填充颜色。
8、填充封闭区域函数
void far floodfill(x, y, color)int x, y, color;x, y : 填充封闭区域中的一点;color:封闭区域的边界颜色。/*bar3d.c* / #include“graphics.h“ main(){ int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,”d: urboc2“);setcolor(3);setfillstyle(7,1);bar(200,200,300,300);getch();closegraph();}
5/7
计算机图形学第二章 Turbo C的图形功能
#include”graphics.h“ main(){ int i,gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,”d: urboc2“);setfillpattern(8,RED);setcolor(YELLOW);circle(200,200,100);floodfill(200,200,YELLOW);
/*pattern.c*/ getch();closegraph();}
9、设置用户自定义的填充模式
void
setfillpattern(char *upattern,int color);其中,upattern是指针,指向8个字节,组成用户定义的8×8点阵图样式。每个字节的8个二进制表示水平8点,8字节表示8行,然后以此模型向整个封闭区域填充。例、用setfillpattern()函数设置用户自定义的填图模式。char upattern[8]={0x00,0x24,0x7e,0x3c,0x3c,0x7e,0x24,0x00};#include”graphics.h“ main(){ int i,gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,”d: urboc2“);setfillpattern(upattern,RED);setcolor(YELLOW);circle(200,200,100);floodfill(200,200,YELLOW);
/*pattern.c*/ getch();closegraph();}
五、图形方式下的文本
1、设置正文字形、显示方向、字符大小函数
void far settextstyle(font, direction, charsize)int font, direction, charsize;font(字形)取值,0:8*8字形,1:3倍笔划字形,2:小号笔划字形,3:无衬线笔划字形,4:黑体笔划字形。
direction(显示方向)取值,0:自左向右,1:由底向上。charsize(字符放大因子)取值,0:用户自定义,1:8*8大小,2:16*16大小,„„。最大为10倍。说明:该函数影响outtext()和outtextxy()两个函数。
2、用当前对齐方式、字形、方向、大小在屏幕上(x,y)显示字符串函数
6/7
计算机图形学第二章 Turbo C的图形功能
void far outtextxy(x, y, textstring)
int x, y;
char *textstring;(为字符串指针,不能是汉字)
3、用当前对齐方式、字形、方向、大小在屏幕上当前位置(cp)显示字符串函数
void far outtext(textstring)char *textstring;(为字符串指针,不能是汉字)
六、字符屏幕控制函数
(包含在conio.h头文件中)
1、清除屏幕并将光标移到左上角函数
void clrscr(void)
2、设置背景颜色函数
void textbackground(int color)
3、设置前景字符颜色函数
void textcolor(int color)
4、将光标移到指定位置函数
void gotoxy(int x, int y)
5、获得光标位置函数
(1)int wherex(void),(2)int wherey(void)
6、向屏幕写字符函数
printf(“%s%c”,变量表),puts(字符串)
7/7
计算机图形学第一章 绪论第一章绪论计算机图形学(Computer Graphics) 使用计算机建立、存储、处理某个具体的或抽象的对象的模型,并根据该模型产生该对象的图形输出的有关理论......
实验三 MFC画直线 最近自己在学习如何在VC 6.0 开发环境下的使用MFC AppWizard(exe)来绘画一条直线,虽然比较简单,通过这样的练习可以帮助你熟悉MFC的开发环境以及其中的消息传......
实 验 报 告一、实验目的1、掌握有序边表算法填充多边形区域;2、理解多边形填充算法的意义;3、增强C语言编程能力。 二、算法原理介绍根据多边形内部点的连续性知:一条扫描线与......
计算机图形学心得体会姓名:学号:201203284班级:计科11202序号:31院系:计算机科学学院 通过一个学期的学习,经过老师细心的讲解,我对图形学这门课有了基础的认识,从您的课上我学......
《3D游戏图形学》实验报告书(实验五)姓名: 学号: 班级:浙江理工大学 二0一二 年 十二 月 数字图像处理实验指导书实验五 纹理映射实验一、实验目的和要求掌握纹理映射的基本原理,利......
