基于水平线扫描的三角形光栅化的实现的制作方法

文档序号:6336604阅读:863来源:国知局
专利名称:基于水平线扫描的三角形光栅化的实现的制作方法
技术领域
本发明主要涉及到3D图形芯片设计的三角形光栅化领域,特指基于水平线扫描 的三角形光栅化的实现。
背景技术
光栅显示器上显示的图形,称之为光栅图形。光栅显示器可以看作是一个像素矩 阵,在光栅显示器上显示的任何一个图形,实际上都是一些具有一种或多种颜色和灰度像 素的集合。由于对一个具体的光栅显示器来说,像素个数是有限的,像素的颜色和灰度等级 也是有限的,像素是有大小的,所以光栅图形只是近似的实际图形。确定最佳逼近图形的像 素集合,并用指定的颜色和灰度设置像素的过程称为图形的扫描转换或光栅化。三角形的光栅化在3D图形芯片的设计中占据重要位置。在OpenGL标准中,图元 类型只有3种点、线段、三角形,可以利用大量三角形拼接成所需要的二维或三维图形。三 角形光栅化的速度直接影响到3D图形芯片的性能,因此需要尽可能加快三角形光栅化的 速度,同时显示一幅图像需要绘制大量的三角形,因此需要加快连续三角形的光栅化速度。目前采用的方法是先计算得到三条边的边界方程,然后利用边界方程判断某一 个像素点与三角形的位置关系,确定当前像素点是否在三角形内部。此种实现方法需要用 到大量的点乘运算,同时需要花费大量时间来排除不在三角形内部像素点。

发明内容
本发明要解决的问题就在于针对现有技术存在的技术难点,本发明提供了一种 结构相对简单、能够快速实现三角形光栅化并能快速实现连续三角形光栅化的实现方式。与现有技术相比,本发明的优点就在于
1、逻辑简单本发明提出的三角形光栅化的实现结构并未采用很复杂的算法,都是比 较利于硬件实现的算法,带来的好处就是逻辑简单;
2、性能优良本发明提出的三角形光栅化实现方式可以快速完成三角形的光栅化,同 时由于采用了 FIFO,加快了连续三角形的光栅化速度;
3、使用方便本发明提出的三角形光栅化实现方式可重用性比较好,可以在嵌入式图 形芯片设计中很方便的移植。


图1是确定水平扫描线的左右端点示意图2是本发明实现填充4个连续三角形的结果; 图3是本发明提出的三角形填充算法实现结构示意图。
具体实施例方式以下将结合附图和具体实施例对本发明做进一步详细说明。
如图1所示,本发明的基于水平线扫描的三角形光栅化的实现,针对每一条水平 扫描线需要计算出此扫描线与三角形边界的交点。处理方法是对当前水平扫描线,分别计 算与三角形三条边(或延长线)的交点,然后根据三条边的位置关系确定水平扫描线的左右 交点。如图2所示,本发明的三角形光栅化实际运行效果,可以快速且平滑的实现三角 形的光栅化。如图3所示,本发明的基于水平线扫描的三角形光栅化的实现,它包括三角形三 个顶点的顺序调整、三边与最低水平线的交点计算、三角形属性增量计算、水平线与三条边 (或延长线)的交点计算、水平线扫描边界的确定、水平线裁剪、扫描线起始点属性计算、水 平线填充等实现过程。输入数据为三角形三个顶点的浮点坐标及每个坐标对应的属性。首 先,调整顶点顺序如图1所示,将三角形三个顶点按照Y坐标的大小排列,同时确定三角形 主要边的方向;然后再分别计算三角形三条边(或其延长线)与最低水平扫描线的交点,同 时根据平面方程计算三角形属性随X和Y的增量;将最低扫描线与三条边的交点坐标,三角 形属性的增量,三角形三个点的坐标与最低点的属性以及主要边的方向写入FIFO;从FIFO 读出数据,计算扫描初始点的属性,利用增量法计算每条水平扫描线与三角形三条边的交 点;确定当前扫描线和下一条扫描线的左右边界;进行水平线裁剪,将下一条扫描线裁剪 后的数据送入属性计算模块计算下一扫描线的起始点属性,将当前扫描线裁剪后的数据送 入浮点转整数单元;将当前扫描线当前左右边界转化成屏幕整数坐标;进行水平线扫描, 利用增量法生成水平扫描线上的每一个像素点的坐标和属性,在进行水平线扫描过程中, 暂停计算扫描边界的流水线,同时下一条扫描线的左右边界和起始点属性已经计算完成, 当前扫描线扫描结束,下一条扫描线马上进入水平线扫描过程,当三角形所有的水平扫描 线均扫描结束时,当前三角形的光栅化结束,继续读取FIFO获取下一个三角形的数据进行 光栅化。与传统的三角形光栅化做法相比,本发明所采用的实现方法与传统的实现方法耗 费的硬件资源相当,但本发明减少了由于判断无需绘制的像素所带来的时间损耗,特别是 对狭长三角形。传统实现方式需要花费大量周期来判断并不需绘制的像素,而本发明不需 要判断,得到的水平扫描线上的像素均为需要绘制的像素。
权利要求
1.基于水平线扫描的三角形光栅化的实现,其特征为输入包含三角形的三个顶点 单精度浮点格式的坐标(Xo, Yo) > (X1, Y1) > (χ2,γ2),三个顶点对应的单精度浮点格式的属 性{R0,G0, B0j A0j Sqj TQj ZQ}、(R1j G1, Bp A1, S1,1\,Z1I、{R2,G2j B2j A2j S2j Τ2,ζ2},首先进行顶点 顺序调整,确定最低点VB(XB,YB)、中间点VM(XM,Ym)、最高点VT(XT,Υτ),在交换顶点顺序过程 中对应点的属性也要交换,得到三角形的三条边TB、TM、MB,其中主要边为TB,利用叉乘积 (Xt-Xb) (Ym-Yb)-(Xm-Xb) (Yt-Yb)的符号确定主要边在左边还是右边符号为1,主要边在右 边,反之主要边在左边;计算三条边与最低点所在水平线的交点,分别计算三个交点坐标 (XTB, Ymin)、(Xmb, Yfflin)、(Χτ , Yfflin)(其中Ymin为Yb的整数上界转化成单精度浮点数),将这三组 坐标和三条边的斜率倒数写入FIFO;计算三角形的属性增量,采用平面方程来计算(以Z属 性为例)三角形的三个顶点的X、Y坐标与Z坐标构成一个空间平面,分别计算出A、B、C即 可得到Z属性分别沿X方向和Y方向的属性增量,其余属性类似处理,将属性增量和最低点 属性也写入FIFO。
2.上一三角形光栅化结束后,读FIFO,取出当前待处理的三角形数据,计算三角形扫 描线起始点的属性,根据增量法计算当前三角形三边与扫描线的交点X坐标,若当前扫描 线与TB、TM、MB边的交点X坐标分别为XTB、XTM、Xm,那么下一条扫描线与三边的交点为XTB+1/ KTB、XTM+1/KTM、Xm^IAmb;根据主要边的位置确定水平线扫描线的左右端点,若主要边在右边 时,若当前扫描线YcuK=Ym时,左边界为Xmb,右边界为XTB,否则左边界为XTM,右边界为Xtb ; 若主要边在左边时,若当前扫描线YcuK=Ym时,左边界为XTB,右边界为Xmb,否则左边界为 Xtb,右边界为XTM,根据左右边界的情况进行水平线裁剪,将裁剪后的浮点坐标转换成屏幕 整数坐标,进行水平线扫描,生成像素点的坐标和属性,一条扫描线扫描结束,允许下一条 扫描线进入水平线扫描,三角形所有扫描线扫描结束,读取FIFO中下一三角形的数据进入 光栅化流程。
全文摘要
本发明公开了一种基于水平线扫描的三角形光栅化的实现方式。它包括三角形三个顶点的顺序调整、三边与最低水平线的交点计算、三角形属性增量计算、水平线与三条边(或延长线)的交点计算、水平线扫描边界的确定、水平线裁剪、扫描线起始点属性计算、水平线填充等实现过程。输入为三角形三个顶点的坐标和属性RGBASTZ,经过上述过程处理之后得到光栅化后的输出。这种三角形光栅化的实现方式可以实现快速的连续三角形的填充,输出三角形内部各个点的屏幕坐标和对应属性RGBASTZ。
文档编号G06F17/50GK102004832SQ20101055585
公开日2011年4月6日 申请日期2010年11月22日 优先权日2010年11月22日
发明者周敏龙, 焦永, 陈宝民 申请人:长沙景嘉微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1