一种计算机屏幕直线的快速高效渲染方法

文档序号:8446215阅读:469来源:国知局
一种计算机屏幕直线的快速高效渲染方法
【技术领域】
[0001]本发明属于计算机图形学技术领域,涉及一种计算机屏幕直线的快速渲染方法。
【背景技术】
[0002]在计算机图形学的处理中,线作为最基本的要素而成为计算机图形处理的重要步骤之一,众多画线算法均以此为基础,例如填充算法、多边形生成算法、图形裁剪算法、消隐算法等。所以,人们普遍在追求一种高效的直线生成算法。
[0003]近年来,不少学者、文献都对直线画线算法进行了改进,但算法的改进效果并不明显,并且一般来讲,改进后的算法过于复杂。

【发明内容】

[0004]本发明针对现有的画线算法过于复杂的不足,提出了一种简单高效的直线画线算法,该算法利用点位的坐标值来确定目标点的画线算法,该算法一反以往通过直线斜率和坐标增量的途径,直接对始末端点坐标进行计算,不断取中从而确定像素位置。
[0005]本发明方法计算机屏幕直线的快速渲染算法。
[0006]计算机直线生成算法,就是给定一条线段的起点和终点,确定出经过该线段的像素点的位置。步骤如下:通过对始末端点坐标进行计算,不断取其中点,一分为二,二分为四……不断取中点,直到将直线上的所有像素位置确定完毕。该算法无需考虑直线斜率以及各坐标方向增量,只需进行简单的数值计算,这里为了提高运算效率,取中运算,采用计算机二进制数值中的移位算法,这种算法便于用硬件的移位寄存器来实现,从而提高了算法的处理速度,故此方法是一种较为高效的直线生成算法。
[0007]本发明方法简单高效,且能够保证渲染直线的精度,通过实验表明,该方法具有较高的屏幕渲染效率。
【附图说明】
[0008]图1计算中点C
图 2 线段(0,0) - (8,6)
图 3 线段(0,0) - (9,4)
图 4 线段(0,0) - (12,0)。
【具体实施方式】
[0009]为了详细说明本发明的算法结构设计、步骤及所达到的效果,以下结合【具体实施方式】详细说明。
[0010]取中画线算法,是基于坐标值来进行运算的,首先给出算法的设计结构:
数据结构设计:
struct coordinate{ int x; //x横坐标 int y; //y纵坐标 };
查找中点位置:
coordinate search_midpoint(coordinate first, coordinate end)
{
coordinate mid;mid.X= (first, x+end.x) >>1;mid.y= (first, x+end.x) >>1;return mid;
}
递归取中画线:
void Linedraw(coordinate first, coordinate end)
{
if (first<end)
{
m= search_midpoint(first, end);output m.X and m.y;
Linedraw(first, m);
Linedraw(m, end);
}
}
算法的详细步骤:
步骤一,给出始末端点AUtl, y0) ,B(xe, ye)上午一条线段,首先计算ΔX=Xe-Xtl, AY=ye-yQ。比较Δ X和Δ Y的大小。如果Δ Χ> Δ Y,则以X轴方向作为基本方向;如果Δ Χ< Δ Y,则以y轴方向作为基本方向。
[0011]步骤二,首先求出其中点C(X1^yni),并画出该像素,如此便可确定除始末端点外的第一个端点C。
[0012]步骤三,在此基础之上,分别将C点坐标赋值给A,B,继续对AB取中点,并计算Δ x
域Δ y)o
[0013]步骤1:如果Δχ (或Ay)不为I,返回重复执行步骤三。
[0014]步骤2:如果Δ X (或Δ y)不为1,则检查所得一系列像素点Δ y (Δχ),若有Ay等于2,则继续对此两点取中,并将所得像素点替换已得到的X值相等的像素点,如此即可画出直线上的所有像素点。
[0015]为此给出三个实例结果图,如图2-4所示。
[0016]至于该画线算法的精度,这里我们采取与Bresenham算法的所确定的像素位置相比较。Bresenham算法是根据决策变量d的值来确定下一个像素点,由于每次都是根据d的正负来确定是加Einc或者NEinc,并且Einc和NEinc均为定值,所以d的值,必然呈现周期的变化。通过实验发现,通过取中画线算法所确定的像素点位置,大部分情况下与Bresenham算法所确定的像素点位置完全相同;但是除此之外,会出现在拐点处,差一个像素点的情况。由于拐点的出现都是规律性的,所以此种画线算法的精度是没有问题的。
【主权项】
1.基于移位取中运算的计算机屏幕直线快速渲染方法,其特征步骤如下: 给出始末端点A (X。,y0) ,B(xe, ye)上午一条线段,首先计算Δ X=xe-xQ,Δ Y=ye-yQ,比较ΔΧ和Δ Y的大小,如果Δ Χ> Δ Y,则以X轴方向作为基本方向;如果Δ Χ< Δ Y,则以y轴方向作为基本方向。
2.求出其中点C(xm,ym),并画出该像素,这里采取移位运算,如此便可确定除始末端点外的第一个端点C,在此基础之上,分别将C点坐标赋值给A,B,继续对AB取中点,并计算ΔX(或Ay);如果Δ X (或Ay)不为I,返回重复执行步骤三;如果Δ X (或Δ y)不为1,则检查所得一系列像素点Ay (Δχ),若有Ay等于2,则继续对此两点取中,并将所得像素点替换已得到的X值相等的像素点,如此即可画出直线上的所有像素点。
【专利摘要】本文提出了一种计算机屏幕直线的快速渲染算法,该方法直接针对线段始、末端点坐标值来直接计算,首先求取中点,然后对起点和中点、中点和终点再次求取中点,直到确定该直线上的所有像素点。取中这里采取二进制的移位运算,所以该方法是一种快速高效的直线渲染算法。
【IPC分类】G06T1-00
【公开号】CN104766268
【申请号】CN201510157597
【发明人】魏冠军, 田金志, 秦海军
【申请人】兰州交通大学
【公开日】2015年7月8日
【申请日】2015年4月7日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1