去年就该写的,但是去年这个时候太忙了。
就写来自己看看。留个记录留个念
文章目录
1. 图形,图像的定义
图像是指计算机内以位图形式存在的灰度信息。
图形含有几何属性,是由场景的几何模型和景物的物理属性共同组成。
2. 点阵、矢量
位图:点阵图(bitmap)
矢量图:用数学的方法描述曲线以及曲线围成的色块制作的图形(vector)
3. 走样,反走样
走样:对图形进行光栅化时,由于显示器的空间分辨率有限,对于非水平、垂直、45°的直线,因像素逼近误差,使得所画图形产生畸变(台阶,锯齿)的现象。
反走样:用于减少或消除走样的技术
4. 字符裁剪精度
主要就是要了解以下三种方式裁剪后结果是什么样子
(1) 串精度
(2) 字符精度
(3)笔画或者像素精度
5. 曲率和挠率
曲率:曲线的单位切矢对弧长的转动率,曲率倒数为曲率半径
挠率:挠率的绝对值等于副法线方向(或密切平面)对于弧长的转动率,挠率大于0、等于0、小于0分别
表示曲线为右旋空间曲线,平面曲线和左旋空间曲线
6. 几何连续(一阶,二阶)与参数连续的区别
注意:
7. 三色学说
红(R),绿(G),蓝(B)三种单色光可以作为基本的颜色——原色,这三种光按不同比例混合就能准确地复现出
任何波长的光,而等量混合则可以产生白光。
8. Z-buffer算法
这个算法中,需要帧缓冲器来存储每个像素的颜色值,还需要一个深度缓存来存放每个像素的深度值。
图形消隐的过程就是给帧缓冲器和Z缓冲器中相应单元填值的过程。
9. 输入输出设备
输入设备:鼠标,键盘,光笔,数字化仪,图像扫描仪
输出设备:各种显示屏
10.多边形裁剪
你要注意起点,终点,可见侧和不可见侧。
主要就是判断哪些点要保留
11. 画线算法
DDA画直线算法
中点画直线算法
Bresenham算法
12. 显式/隐式方程与参数方程
显式方程:y=f(x)
隐式方程:f(x) = 0
显式方程不能表示封闭或者多值曲线,例如不能表示圆
隐式表示的优点:易于判断函数是否大于0、小于0和等于0,也就是易于判断点是落在曲线上还是曲线的哪一侧。
参数方程: t为参数,p(t) = [x(t),y(t),z(t)]
参数方程比显式、隐式方程有更多的优越性,主要表现在:
- 可以满足几何不变性要求
- 有更大的自由度来控制曲线、曲面的形状
- 对非参数方程表示的曲线曲面进行变换,必须对曲线曲面上的每个型值点进行几何变换;而对参数表示的曲线、曲面,可对其参数方程直接进行几何变换。
- 便于处理斜率无穷大的情况,不会因此中断计算
- 参数方程中,代数、几何相关和无关的变量是完全分离的,而且对变量个数不限,从而便于用户将低维空间中的曲线曲面扩展到高维空间中去。这种变量分离的特点使得可以用数学公式处理几何分量。
- 规格化的参数变量t属于[0,1],使得其相应的几何分量是有界的,而不必用另外的参数去定义边界。
- 易于用矢量和矩阵表示几何分量,简化了计算
13. 多边形填充
区域——指已经表示成点阵形式的填充图形,是像素的集合
区域填充是指将区域内的一点(种子点)的颜色扩展到整个区域的过程
主要是注意4连通,8连通是怎么连通的
14. 前向面,法向面和视图关系
15. 反走样
常见有3种技术:
- 提高分辨率
- 区域采样
- 加权区域采样
16. 中点画线
基本上就是给定一个点,知道了d分量,求下一个点在什么位置。
17. 直线裁剪
Cohen-Sutherland裁剪算法:
说白了就是判断线段上的某个顶点在哪个编码区域,回答区域编号就是了。
18. Bezier曲线,样条曲线
19. Lambert参数的定义,漫反射模型
理想漫反射:
当光源来自一个方向时,漫反射光均匀地向各方向传播,与视点无关,它是由表面的粗糙不平引起的,因而漫反射光的空间分布是均匀的。
20. phong光照模型
21.openGL
OpenGL模型变换有三个常用的基本函数,分别是平移,旋转和缩放
glTranslate(x,y,z):平移 x,y,z指定沿世界坐标系x,y,z轴的平移量
glRotate(角度,x,y,z):旋转 角度以度为单位,x,y,z指定世界坐标系中的旋转轴向量(x,y,z)。
glScale(x,y,z)*:缩放 x,y,z指定沿x,y和z轴的比例因子。
开始绘图之前,屏幕上可能有一些图形,首先要清除这些图形。这些图形存储在OpenGL的显示缓冲区中。清除操作与两个函数有关,第一个函数是
void glClearColor(red,green,blue,alpha);
参数red,green,blue,alpha为清除颜色缓冲区的值(指背景颜色)。然而,这个函数只是设置了背景颜色,并未实际进行清除操作。实际的清除操作由第二个函数完成,即:
void glClear(mask);
mask表示执行操作的缓冲区对象。OpenGL中有多种缓冲区,如下:
绘制完成之后可以使用两个函数之一来结束绘图,通常在每一帧的绘制末尾调用。
这两个函数如下,功能稍有不同:
void glFlush():让前面的OpenGL绘制命令开始执行,这样可以保证绘制在有限的时间完成函数
void glFinish():强制前面的OpenGL绘制命令开始执行,并等到绘制完成时再返回执行下面的操作。
有时,为了保证操作的同步性需要调用glFinish函数,然而,过多的调用glFinish()则会降低绘制的效率,
所以,如果glFlush()的功能足够,则尽量使用glFlush()
OpenGL中通过使用glVertex函数来定义顶点,glBegin函数标志几何元素绘制开始,glEnd函数表示几何
元素绘制结束。通过设置glBegin()的参数来指定绘制何种几何元素。注意,一个glBegin函数必须搭配一
个glEnd函数,glVertex函数必须出现在glBegin()和glEnd()之间。
函数 void glBegin(Glenum mode) 中mode的值:
22. 中点画圆:
23. 直线的画法:
DDA画线:
中点画线:
Bresenham画线: