一種計算機屏幕直線的快速高效渲染方法
【技術領域】
[0001]本發(fā)明屬于計算機圖形學技術領域,涉及一種計算機屏幕直線的快速渲染方法。
【背景技術】
[0002]在計算機圖形學的處理中,線作為最基本的要素而成為計算機圖形處理的重要步驟之一,眾多畫線算法均以此為基礎,例如填充算法、多邊形生成算法、圖形裁剪算法、消隱算法等。所以,人們普遍在追求一種高效的直線生成算法。
[0003]近年來,不少學者、文獻都對直線畫線算法進行了改進,但算法的改進效果并不明顯,并且一般來講,改進后的算法過于復雜。
【發(fā)明內(nèi)容】
[0004]本發(fā)明針對現(xiàn)有的畫線算法過于復雜的不足,提出了一種簡單高效的直線畫線算法,該算法利用點位的坐標值來確定目標點的畫線算法,該算法一反以往通過直線斜率和坐標增量的途徑,直接對始末端點坐標進行計算,不斷取中從而確定像素位置。
[0005]本發(fā)明方法計算機屏幕直線的快速渲染算法。
[0006]計算機直線生成算法,就是給定一條線段的起點和終點,確定出經(jīng)過該線段的像素點的位置。步驟如下:通過對始末端點坐標進行計算,不斷取其中點,一分為二,二分為四……不斷取中點,直到將直線上的所有像素位置確定完畢。該算法無需考慮直線斜率以及各坐標方向增量,只需進行簡單的數(shù)值計算,這里為了提高運算效率,取中運算,采用計算機二進制數(shù)值中的移位算法,這種算法便于用硬件的移位寄存器來實現(xiàn),從而提高了算法的處理速度,故此方法是一種較為高效的直線生成算法。
[0007]本發(fā)明方法簡單高效,且能夠保證渲染直線的精度,通過實驗表明,該方法具有較高的屏幕渲染效率。
【附圖說明】
[0008]圖1計算中點C
圖 2 線段(0,0) - (8,6)
圖 3 線段(0,0) - (9,4)
圖 4 線段(0,0) - (12,0)。
【具體實施方式】
[0009]為了詳細說明本發(fā)明的算法結(jié)構設計、步驟及所達到的效果,以下結(jié)合【具體實施方式】詳細說明。
[0010]取中畫線算法,是基于坐標值來進行運算的,首先給出算法的設計結(jié)構:
數(shù)據(jù)結(jié)構設計:
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,繼續(xù)對AB取中點,并計算Δ x
域Δ y)o
[0013]步驟1:如果Δχ (或Ay)不為I,返回重復執(zhí)行步驟三。
[0014]步驟2:如果Δ X (或Δ y)不為1,則檢查所得一系列像素點Δ y (Δχ),若有Ay等于2,則繼續(xù)對此兩點取中,并將所得像素點替換已得到的X值相等的像素點,如此即可畫出直線上的所有像素點。
[0015]為此給出三個實例結(jié)果圖,如圖2-4所示。
[0016]至于該畫線算法的精度,這里我們采取與Bresenham算法的所確定的像素位置相比較。Bresenham算法是根據(jù)決策變量d的值來確定下一個像素點,由于每次都是根據(jù)d的正負來確定是加Einc或者NEinc,并且Einc和NEinc均為定值,所以d的值,必然呈現(xiàn)周期的變化。通過實驗發(fā)現(xiàn),通過取中畫線算法所確定的像素點位置,大部分情況下與Bresenham算法所確定的像素點位置完全相同;但是除此之外,會出現(xiàn)在拐點處,差一個像素點的情況。由于拐點的出現(xiàn)都是規(guī)律性的,所以此種畫線算法的精度是沒有問題的。
【主權項】
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,繼續(xù)對AB取中點,并計算ΔX(或Ay);如果Δ X (或Ay)不為I,返回重復執(zhí)行步驟三;如果Δ X (或Δ y)不為1,則檢查所得一系列像素點Ay (Δχ),若有Ay等于2,則繼續(xù)對此兩點取中,并將所得像素點替換已得到的X值相等的像素點,如此即可畫出直線上的所有像素點。
【專利摘要】本文提出了一種計算機屏幕直線的快速渲染算法,該方法直接針對線段始、末端點坐標值來直接計算,首先求取中點,然后對起點和中點、中點和終點再次求取中點,直到確定該直線上的所有像素點。取中這里采取二進制的移位運算,所以該方法是一種快速高效的直線渲染算法。
【IPC分類】G06T1-00
【公開號】CN104766268
【申請?zhí)枴緾N201510157597
【發(fā)明人】魏冠軍, 田金志, 秦海軍
【申請人】蘭州交通大學
【公開日】2015年7月8日
【申請日】2015年4月7日