计算机图形学

第一章 绪论
计算机图形学:
国际标准化组织(ISO)的定义:计算机图形学是研究通过计算机将数据转换为图形,并在专门显示设备上显示的原理,方法和技术的学科。
IEEE:计算机图形学是借助计算机产生图形,图像的技术或科学。
Computer graphics is the art or science of producing graphical images with the aid of computer.
计算机图形学:数据模型变为数字图像
计算机视觉,模式识别:数字图像变为数据模型
图像处理:数字图像变为数字图像
计算机辅助几何设计:数据模型变为数据模型

C语言常用图形函数:
#include <graphics.h>
显示器有两种模式:
文本模式:默认模式,只能显示文本,图形函数不能工作
图形模式:图形函数可以工作,能够显示图形,并且有专门的文本输出函数
图形模式的初始化函数:
void initgraph(int *gdriver, int *gmode, char *path)
其中:gdriver用来指定要装入的图形驱动程序,gmode用来设置图形显示模式
path用来指定图形驱动程序所在的目录路径,默认为“C:/Win-TC/projects”,若为空,则到程序所在的当前目录下寻找。
图形模式的初始化方法:
用户指定图形模式
自动检测图形模式
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,“C:/Win-TC/projects”);
图形模式的关闭:
显示器退出图形模式回到文本模式:void closegraph();

绘制一个矩形
void main()
{
int gdriver,gmode;
gdriver=DETECT;
initgraph(&gdriver,&gmode,“C:/Win-TC/projects”);
rectangle(100,100,300,250);
getch();
closegraph();
}

设置背景色:void setbkcolor(int color);
设置前景色:void setcolor(int color);
清除图形屏幕内容:void cleardevice();

画点函数
将点(x,y)置成color色:void putpixel(int x,int y,int color);
获得当前点(x,y)的颜色值:int getpixel(int x,int y);
有关坐标位置的函数
返回x轴的最大值:int getmaxx();
返回y轴的最大值:int getmaxy();
返回游标在x轴的位置:int getx();
返回游标在y轴的位置:int gety();
移动游标到(x,y)点:void moveto(int x,int y);
将游标从现行位置(x,y)移动到(x+dx,y+dy)的位置,移动过程中不画点:void moverel(int dx,int dy);
画线函数
画一条从点(x0,y0)到(x1,y1)的直线
void line(int x0,int y0,int x1,int y1);
画一条从现行游标到点(x,y)的直线
void lineto(int x,int y);
画一条从现行游标(x,y)到按相对增量确定的点(x+dx,y+dy)的直线
void linerel(int dx,int dy);
画圆弧类
以(x,y)为圆心,radius为半径,画一个圆
void circle(int x,int y,int radius);
以(x,y)为圆心,radius为半径,从stangle开始到endangle,画一段圆弧线,逆时针
void arc(int x,int y,int stangle,int endangle,int radius);
以(x,y)为圆心,xradius,yradius为x轴和y轴半径,从stangle开始到endangle,画一段椭圆线
void ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius);
画多边形类函数
以(x1,y1)为左上角,(x2,y2)为右下角,画一个矩形框
void rectangle(int x1,int y1,int x2,int y2);
画一个顶点个数为numpoints(取值多边形顶点数+1),各个顶点坐标由整型数组polypoints(中最后一个点与第一个相同)给出的多边形
void drawpoly(int numpoints,int *polypoints);

线型(style)
线宽(width)
设置当前绘图所用的线型和宽度
setlinestyle(int style,unsigned pattern,int width)
pattern:如果线型使用系统预定义的4种,就设为0。pattern是一个16位二进制数,每一位为1时显示。

为各种图形函数设置填充模式和颜色
setfillstyle(int pattern,int color)
color是填充颜色 pattern指定填充模式
用于对一指定的封闭区域进行填充,其填充模式和颜色由setfillstyle函数决定
floodfill(int x,int y,int border)
x,y指位于填充区域内任意一点的坐标,border为填充区域边界的颜色
用户自定义的填充模式
setfillpattern(char *pattern,int color)

测试要保存左上角为(x1,y1),右下角为(x2,y2)的图形屏幕区域内的全部内容需要多少字节
unsigned imagesize(int x1,int y1,int x2,int y2);
将左上角为(x1,y1),右下角(x2,y2)的图形屏幕区域内的图像保存在内存中,指针为mapbuf
void getimage(int x1,int y1,int x2,int y2,void *mapbuf)
将图像输出到左上角为点(x,y)的位置上,其中参数op规定如何释放内存中的图像
void putimage(int x,int y,void *mapbuf,int op)

文本输出函数
在现行位置输出字符串指针textstring所指的文本:
void outtext(char *textstring);
在规定的(x,y)位置输出字符串指针textstring所指的文本
void outtextxy(int x,int y,char *textstring);
第二章 基本图形的生成
基本图形的生成原理:是指在点阵输出设备上,如何快速的确定一个最佳逼近与理想图形的像素集,并用指定颜色把这些像素显示出来。
直线的生成
(1)数值微分法(DDA法)
对于|k|≤1的直线段
①若x2≥x1,则x++,y=y+k,取像素点(x,int(y+0.5))//四舍五入
②否则,x–,y=y-k,取像素点(x,int(y+0.5))
对于|k|>1的直线段
①若y2≥y1,则y++,x=x+1/k,取像素点(int(x+0.5),y)//四舍五入
②否则,y–,x=x-1/k,取像素点(int(x+0.5),y)
(2)中点画线法
假定直线斜率0<k<1,直线过P1P2这个,竖着的线上一点Q,取中点M,
若M在Q上方,则P1离直线更近,选择P1为下一个像素
若M在Q下方,则P2离直线更近,选择P2为下一个像素
若M与Q重合,则P1P2任取一点
(xp,yp)为P1左边一点,M就表示为(xp+1,yp+0.5)
d=F(M)=a(xp+1)+b(yp+0.5)+c
若d<0,M在直线下方,取P2
若d>0,M在直线上方,取P1
若d=0,M在直线重合,P1P2任取一点
当d≥0时,取P1,再下一个就为
d1=F(xp+2,yp+0.5)=d+a
当d≥0时,取P2,再下一个就为
d1=F(xp+2,yp+1.5)=d+a+b
最终问题就可以变为:
假设直线的第一个像素为左端点(x1,y1)
d0=F(x1+1,y1+0.5)=F(x1,y1)+a+0.5b
d0=a+0.5b
再依次根据di的大小判断,就好了
(3)Bresenham画线法
基本原理:
假设直线斜率k在0到1之间,并且直线当前已确定的一个像素点为(xk,yk)。则下一步需要在列xk+1上确定扫描线y的值,将要选择两点到直线上点的距离做差,来作为依据选择。
圆与椭圆的生成
由于圆有对称性,我们只需要解决1/8圆弧
中点画圆法
跟中点画线法很像
若d<0,取正右方向增量为2xp+3
若d≥0,取右下方向增量为2(xp-yp)+5
d0=1.25-r
最开始x=0,y=r
由于椭圆有对称性,我们只需要解决1/4椭圆弧
上半部分2b²x<2a²y≥0
若d<0,取正右方向增量为b²(2xp+3)
若d≥0,取右下方向增量为b²(2xp+3)+a²(-2yp+2)
d0=b²+a²(-b+0.25)
下半部分2b²x≥2a²y>0
若d≤0,取P2(右下方向)增量为b²(2xp+2)+a²(-2yp+3)
若d>0,取P1(正下方向)增量为a²(-2yp+3)
d0=b²(x+0.5)²+a²(y-1)²-a²b²
区域填充
填充方法:
(1)种子填充算法
四连通区域
八连通区域
边界:区域边界上所有像素均具有某个特定的颜色值,区域内部所有像素均不取这一特定颜色,而边界外的像素可以与边界的颜色相同
(2)有序边表填充算法
在这里插入图片描述
(3)边填充算法
对每一条水平扫描线,依次求与多变形各边的交点,将该扫描线上交点右边的所有像素求补,对多边形的每条边作此处理。顺序随意。
(4)图案填充
图案填充方式:
透明方式:当图案位图的对应位置为1时,用前景色写像素,否则,不改变该像素的颜色值
不透明方式:当图案位图的对应位置为1时,用前景色写像素,否则,用背景色写像素
对齐方法
第一种对齐方法:把图案与边界或内部某点对齐,填充的图案将随着区域的移动而跟着移动,看起来自然,但算法复杂性高
第二种对齐方法:把图案与边界或外部部某点对齐,算法简单,但是当区域移动时,图案不会跟着移动
假设上一像素坐标为(x,y),则它在图案模型上对应的位置是(x mod M,y mod N)
裁剪
直线段的裁剪
(1)编码裁剪算法
①若两个端点编码都为0000,则整条线段全部位于窗口内
②若两个端点编码的位逻辑按位与不为0,则整条线段全部位于窗口外
③若线段不能由以上两种测试决定,则可能部分可见,需求交点,把线段再分割
1001 1000 1010
0001 0000 0010
0101 0100 0110
(2)中点分割裁剪算法
分别寻找直线段两个端点各自对应的最远可见点,这两个最远可见点之间的线段即为要输出的可见段
多边形的裁剪
(1)逐边裁剪算法
依次用窗口的四条边框直线对多边形进行分步裁剪。先用一条边框直线对整个多边形进行裁剪,得到一个或若干个新的多边形;再用第二条边框直线对这些新产生的多边形进行裁剪。以此类推,直到用四条边框直线都裁剪完。
在这里插入图片描述
线宽与线型的处理
线刷子
垂直线刷子:直线斜率在[-1,1]时,把刷子置成垂直方向
水平线刷子:直线斜率不在[-1,1]时,把刷子置成水平方向
直线线刷子(一维循环)
正方形刷子(二维循环)
线型可以用一个布尔值序列来存放
第三章 图形变换
几何变换,改变几何形状和位置
非几何变换,改变图形的颜色,线型等属性
图形变换:一般是指对图形的几何信息经过变换后产生新的图形
案例1 三维图形几何变换算法116
案例2 正交投影算法129
案例3 三视图算法135
案例4 透视投影算法141
案例5 二维图形几何变换算法83
第四章 参数样条曲线
二次参数样条曲线:P(t)=A0+A1t+A2t²
三次参数样条曲线:P(t)=A0+A1t+A2t²+A3t³
插值与逼近
插值方法要求建立的曲线或曲面数学模型,严格通过已知的每一个型值点
逼近方法建立的曲线或曲面数学模型只是近似的接近已知的型值点
拟合
是指在曲线或曲面的设计过程中,用插值或逼近的方法使生成的曲线或曲面达到某些设计要求。
参数连续性与几何连续性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二次插值样条曲线
P(t)=(2t²-3t+1)P1+(-4t²+4t)P2+(2t²-t)P3
二次插值样条曲线的加权合成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三次插值样条曲线
三次自然样条曲线
在这里插入图片描述
Hermite样条曲线
在这里插入图片描述
在这里插入图片描述
Cardinal样条曲线
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Bezier曲线(逼近)
在这里插入图片描述
P是控制点并不是曲线上的点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B样条曲线
在这里插入图片描述
二次B样条曲线
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三次B样条曲线
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第五章 几何造型
几何造型:是指能将物体的形状存储在计算机内,形成该物体的三维几何模型,并能 为各种具体应用提供信息的一种技术

控制点:用来确定曲线和曲面的位置与形状,而相应曲线和曲面不一定经过的点。
型值点:用来确定曲线和曲面的位置与形状,而相应曲线和曲面一定经过的点。
插值点:为提高曲线和曲面的精度,在型值点之间插入的一系列点。

边是一维几何元素,是两个相邻面(对于正则形体)或多个相邻面(对于非正则形体)的交界。
直线边由其端点(起点和终点)定界;曲线边由一系列型值点或控制点表示,也可用显式、隐式方程表示。

环是由有序、有向边组成的面的封闭边界。环中的边不能相交,相邻两条边共享一个端点。
内环和外环
确定面的最大外边界的环称为外环,其边按逆时针方向排序;
确定面中内孔边界或凸台边界的环称为内环,其边按顺时针方向排序。因此,在面上沿一个环前进,左侧总在面内,右侧总在面外。

体是三维几何元素,是由封闭表面围合成的有效空间,其边界是有限面的并集。
体素
体素是可以用有限个尺寸参数定位和定形的体,比如长方体、圆柱体、圆锥体、圆环体、球体、棱柱体、棱锥体、棱台体等。也可以是由参数定义的一条(或一组)截面轮廓线沿一条(或一组)空间参数曲线作扫描运动而产生的形体。
几何信息:用于描述几何元素(如点、线、面等)的空间位置和大小。比如,点的空间坐标值、线段的长度等。
拓扑信息:用于描述几何元素之间的相互连接关系。只反映几何元素的结构关系,不考虑它们各自的绝对位置,这种关系称为拓扑关系。几何元素之间共有九种拓扑关系:面-面相邻性、边-边相邻性、顶点-顶点相邻性、边-面相邻性、顶点-面相邻性、顶点-边相邻性、面-边包含性、面-顶点包含性、边-顶点包含性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
布尔运算
两个多边形之间进行并,交,差的运算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分形几何造型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
真实感图形
消除隐藏线
平面体的消隐处理
在这里插入图片描述
在这里插入图片描述
曲面体的消隐处理
在这里插入图片描述
在这里插入图片描述
光照模型与明暗效应
基本光照模型
只考虑环境光和点光源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Flat明暗处理法
在这里插入图片描述
在这里插入图片描述
Gouraud明暗处理法
在这里插入图片描述
在这里插入图片描述
Phong明暗处理法
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值