https://www.icourse163.org/learn/HUST-1003636001?tid=1206895203#/learn/content?type=detail&id=1211820005&sm=1
计算机图形学
可编程渲染管线
欢迎来到图形世界
初识图形学
研究怎样用计算机来显式,生成和处理图形的原理,方法和技术的一门学科
输入:结构特征数据
输出:图像信号
计算机视觉跟图形学相反,它是输入图形信号,输出结果特征数据
光栅图形学:图元生成,区域填充,裁剪,反走样,消隐等基本图形概念及相应算法
光栅图形学的基础:光栅扫描式图形显示器器,该设备是画点设备(点阵单元发生器)
有趣的图形应用
CAD
认识图形系统
图形系统浅析
计算机图形系统的组成:交换,计算,输入,输出,存储
阴极射线管(CRT,Cathode Ray Tube):
彩色阴极射线管:
荫罩板和三色荧光屏:
扫描方式:
随机扫描:指哪扫哪
光栅扫描:从上往下扫描
光栅扫描是控制电子束按某种光栅形状进行的顺序扫描,而字符,图形是靠Z轴信号控制辉亮形成.
图形显示子系统结构
光栅扫描图形显示子系统:CPU+主存+GPU+视频显示控制器
可编程渲染管线
渲染管线的主要功能:决定在给定虚拟相机,三维物体,光源,照明模式,以及纹理等诸多条件的情况下生成会绘制一幅二维图像的过程
GPU渲染管线:
- 应用阶段[CPU]:将需要在屏幕显示的几何体(绘制图元),比如点,线,矩阵等输入到绘制管线的下一阶段.具体包括图元的顶点数据,摄像机位置,光照纹理等参数.
- 几何阶段[GPU]:将顶点数据最终进行屏幕映射
- 将各个图元放入到世界坐标中(模型变换)
- 根据光照纹理等计算顶点处材质的光照着色效果
- 根据摄像机的位置,取景范围进行观察变换和裁剪
- 最后进行屏幕映射(把三维模型转换到屏幕坐标系中)
- 光栅化阶段[GPU]:给每个像素正确配色,以便绘制整幅图形
探秘GPU渲染管线
A.几何阶段
顶点着色器(建模坐标系->世界坐标系):
- 模型变换:不同坐标系的模型变换到同一坐标系(世界坐标)中
- 视图变换:世界空间的内容转换到相机空间(观察空间)
- 顶点着色:确定顶点上材质上的光照效果
几何着色器,也就是曲面细分(世界坐标系->观察坐标系): - 输入的是顶点数据
- 可高效创建和删除图元
裁剪(观察坐标系->屏幕坐标系): - 投影变换,裁剪
屏幕映射
B.光栅化阶段
图形设置->图形遍历->片元着色->片元操作
着色编程
索引缓冲对象(EBO):存储顶点的索引信息; (减少重复顶点数据)
顶点缓冲区对象(VBO):存储顶点的各种信息.(在显卡申请一段空间,数据直接从GPU里取)
顶点数组对象(VAO):
图形思维的起点
点和直线-DDA算法(上)
数值微分法(Digital Differential Analyzer):一种直接从直线的微分方程生成直线的方法
点和直线-Bresenham算法
中点Bresenham算法:输入P0和P1,输出最佳逼近这条直线的像素点集
y=kx+b
假定0<=k<=1,x是最大位移方向
改进Bresenham算法
朴素的软光栅二
圆(上)
Bresenham画圆法
算法步骤:
1.输入圆的半径R
2.计算初始值
d=1.25-R;x=0;y=R;
3.绘制点(x,y)及其在八分圆中的另外七个对称点
椭圆的中点Bresenham算法 多边形(上) 多边形(下) 区域填充 改变图元的模样 必不可少的反走样 初识造型技术 样条上 样条下 规则形体(上) 不规则形体 编码裁剪算法-Cohen-Sutherland(线段裁剪): 三维空间的多边形 屏幕映射
5.当x
x-扫描思想:
多边形(中)
y-向连贯性算法:
1.创建一个链表,存放所有y坐标(节点称为桶)
2.每个节点存放最低y坐标相关的直线
数据结构:
桶表,链表
边缘填充算法(重复访问的点很多)
栅栏填充算法:
按任意顺序处理多边形的每条边(处理每条边与扫描线的交点时,将交点与栅栏之间的像素取补)
边标志算法(先画边界后填色):
1.用一种特殊的颜色在帧缓器中将多边形的边界勾画出来;
2.将着色的像素点依x坐标递增的顺序两两配对;
3.将每一对像素所构成的扫描线区间内的所有像素置为填充色
算法步骤:
1.打标记:将多边形的每条边进行直线扫描转换(将多边形边界所经过的像素打上标记)
2.填充:Inside,初值:假,遇到标记点:取反,真:填充,假:不填充
区域的定义:指已经表示成点阵形式的填充图形,它是像素集合
种子填充思想(Photoshop的油漆桶)
以边界表示为例看种子填充思想:
边界填充算法:
算法输入:种子点坐标(x,y),填充色和边界颜色
数据结构:栈结构
算法输出:最佳逼近的像素点集.
4-连通边界填充算法步骤:
种子像素入栈,栈非空时重复执行三步操作:
1.栈顶像素出栈
2.将出栈像素置成填充色
3.检查出栈像素的4-邻接点,若其中某个像素点不是边界色且未置成多边形色,则把该像素入栈
泛填充算法通常用于给区域重新着色
填充
1.提高分辨率
2.过取样:重叠过取样
3.区域取样
4.加权区域取样点探秘造型技术
图形的构成:体-面-环-边-顶点的层次记录信息
实体的定义:正则形体+二维流形
实体的完整定义:对于一个占据有限空间的正则形体,如果其表面是二维流形,则该正则形体为实体
在绘图术语中,样条是通过一组指定点集而生成平滑曲线的肉韧带.
样条曲线(spine curve)指由多项式曲线端连接而成的曲线,在每段的边界出满足特定的连续性条件
样条曲面:可以使用两组样条曲线进行描述
插值和逼近样条(Photoshop的钢笔):
Bezier曲线和曲面(样条逼近算法)
实体模型的三类表示:
1.边界表示(Boundary Representation):比如多边形平面和样条曲面
2.构造实体几何表示(Constructive Solid Geometry):
3.空间分割表示(Space-Partitioning)
1.分形几何
2.粒子系统裁剪与屏幕映射
1.直线完全可见
2.直线完全不可见
3.直线与裁剪窗口相交
中点裁剪算法
裁剪思想(下)
Liang-Barsky裁剪算法(解方程组)
Sutherland-Hodgeman多边裁剪:将多边形边界作为一个整体,每次用窗口的一条边界对要裁剪的多边形进行裁剪
Weiler-Atherton算法:
顶点着色器->几何着色器->裁剪->屏幕映射
->模型变换->视图变换->投影变换->屏幕映射
建模坐标系->世界坐标系->观察坐标系->观察坐标系->屏幕坐标系
局部空间->世界空间->观察空间->裁剪空间->屏幕空间