主权项 |
1.基于水平线扫描的三角形光栅化的实现方法,其特征为:输入包含三角形的三个顶点单精度浮点格式的坐标(X<sub>0</sub>,Y<sub>0</sub>)、(X<sub>1</sub>,Y<sub>1</sub>)、(X<sub>2</sub>,Y<sub>2</sub>),三个顶点对应的单精度浮点格式的属性{R<sub>0</sub>,G<sub>0</sub>,B<sub>0</sub>,A<sub>0</sub>,S<sub>0</sub>,T<sub>0</sub>,Z<sub>0</sub>}、{R<sub>1</sub>,G<sub>1</sub>,B<sub>1</sub>,A<sub>1</sub>,S<sub>1</sub>,T<sub>1</sub>,Z<sub>1</sub>}、{R<sub>2</sub>,G<sub>2</sub>,B<sub>2</sub>,A<sub>2</sub>,S<sub>2</sub>,T<sub>2</sub>,Z<sub>2</sub>};首先进行顶点顺序调整,确定最低点V<sub>B</sub>(X<sub>B</sub>,Y<sub>B</sub>)、中间点V<sub>M</sub>(X<sub>M</sub>,Y<sub>M</sub>)、最高点V<sub>T</sub>(X<sub>T</sub>,Y<sub>T</sub>),在交换顶点顺序过程中对应点的属性也要交换,得到三角形的三条边TB、TM、MB,其中主要边为TB,利用叉乘积(X<sub>T</sub>-X<sub>B</sub>)(Y<sub>M</sub>-Y<sub>B</sub>)-(X<sub>M</sub>-X<sub>B</sub>)(Y<sub>T</sub>-Y<sub>B</sub>)的符号确定主要边在左边还是右边:符号为负,主要边在右边,反之主要边在左边;计算三条边与最低点所在水平线的交点,分别计算三组交点坐标(X<sub>TB</sub>,Y<sub>min</sub>)、(X<sub>MB</sub>,Y<sub>min</sub>)、(X<sub>TM</sub>,Y<sub>min</sub>),其中Y<sub>min</sub>为Y<sub>B</sub>的整数上界转化成单精度浮点数,将所述三组交点坐标和三条边的斜率倒数写入FIFO;计算三角形的属性增量,采用平面方程来计算,对于Z属性,三角形三个顶点的X、Y坐标与Z坐标构成一个空间平面,该平面的方程为:<img file="2010105558571100001DEST_PATH_IMAGE002.GIF" wi="492" he="229" />分别计算出A、B、C即可得到Z属性分别沿X方向和Y方向的属性增量,其余属性R、G、B、A、S、T增量的处理只需要将上述方程中的Z、Z<sub>0</sub>、Z<sub>1</sub>、Z<sub>2</sub>用相应的属性分量来代替进行计算,将计算得到的属性增量和三角形最低点属性也写入FIFO,当上一三角形光栅化结束后,读FIFO,取出当前待处理的三角形数据,计算三角形扫描线起始点的属性,根据增量法计算当前三角形三边与扫描线的交点X坐标,若当前扫描线与TB、TM、MB边的交点X坐标分别为X<sub>TB</sub>、X<sub>TM</sub>、X<sub>MB</sub>,那么下一条扫描线与三边的交点为X<sub>TB</sub>+1/K<sub>TB</sub>、X<sub>TM</sub>+1/K<sub>TM</sub>、X<sub>MB</sub>+1/K<sub>MB</sub>,其中K<sub>TB</sub>、K<sub>TM</sub>、K<sub>MB</sub>分别为三角形三条边TB、TM、MB的斜率;根据主要边的位置确定水平线扫描线的左右边界,若主要边在右边时,若当前扫描线Y<sub>cur</sub><=Y<sub>M</sub>时,左边界为X<sub>MB</sub>,右边界为X<sub>TB</sub>,否则左边界为X<sub>TM</sub>,右边界为X<sub>TB</sub>;若主要边在左边时,若当前扫描线Y<sub>cur</sub><=Y<sub>M</sub>时,左边界为X<sub>TB</sub>,右边界为X<sub>MB</sub>,否则左边界为X<sub>TB</sub>,右边界为X<sub>TM</sub>,根据左右边界的情况进行水平线裁剪,将裁剪后的浮点坐标转换成屏幕整数坐标,进行水平线扫描,生成像素点的坐标和属性,一条扫描线扫描结束,允许下一条扫描线进入水平线扫描,三角形所有扫描线扫描结束,读取FIFO中下一三角形的数据进入光栅化流程。 |