发明名称 基于水平线扫描的三角形光栅化的实现方法
摘要 本发明公开了一种基于水平线扫描的三角形光栅化的实现方式。它包括三角形三个顶点的顺序调整、三边与最低水平线的交点计算、三角形属性增量计算、水平线与三条边(或延长线)的交点计算、水平线扫描边界的确定、水平线裁剪、扫描线起始点属性计算、水平线填充等实现过程。输入为三角形三个顶点的坐标和属性RGBASTZ,经过上述过程处理之后得到光栅化后的输出。这种三角形光栅化的实现方式可以实现快速的连续三角形的填充,输出三角形内部各个点的屏幕坐标和对应属性RGBASTZ。
申请公布号 CN102004832B 申请公布日期 2013.01.23
申请号 CN201010555857.1 申请日期 2010.11.22
申请人 长沙景嘉微电子股份有限公司 发明人 焦永;陈宝民;周敏龙
分类号 G06F17/50(2006.01)I 主分类号 G06F17/50(2006.01)I
代理机构 代理人
主权项 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>&lt;=Y<sub>M</sub>时,左边界为X<sub>MB</sub>,右边界为X<sub>TB</sub>,否则左边界为X<sub>TM</sub>,右边界为X<sub>TB</sub>;若主要边在左边时,若当前扫描线Y<sub>cur</sub>&lt;=Y<sub>M</sub>时,左边界为X<sub>TB</sub>,右边界为X<sub>MB</sub>,否则左边界为X<sub>TB</sub>,右边界为X<sub>TM</sub>,根据左右边界的情况进行水平线裁剪,将裁剪后的浮点坐标转换成屏幕整数坐标,进行水平线扫描,生成像素点的坐标和属性,一条扫描线扫描结束,允许下一条扫描线进入水平线扫描,三角形所有扫描线扫描结束,读取FIFO中下一三角形的数据进入光栅化流程。
地址 410205 湖南省长沙市河西高新区麓谷基地麓景路2号长沙生产力促进中心