基于OpenGL ES非固定管線矢量點(diǎn)顯示方法和裝置制造方法
【專利摘要】一種基于OpenGL?ES非固定管線的矢量點(diǎn)顯示方法和裝置,所述方法包括步驟:通過輸入的點(diǎn)的坐標(biāo)、寬度、顏色值獲取所述點(diǎn)的2維方陣;根據(jù)所述2維方陣的邏輯坐標(biāo)確定所述2維方陣的內(nèi)接圓半徑;從所述2維方陣中獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn);將獲取的所述像素點(diǎn)進(jìn)行顏色輸出。本發(fā)明無須借助額外的圓點(diǎn)位圖,直接對2維方陣進(jìn)行篩選,將與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn)進(jìn)行顏色輸出,直接顯示圓點(diǎn),簡單快速,并且當(dāng)需要繪制多個(gè)矢量圓點(diǎn)時(shí),只需重復(fù)執(zhí)行本發(fā)明所提供的方法即可實(shí)現(xiàn),使圓點(diǎn)顯示操作變得簡單高效。
【專利說明】基于OpenGL ES非固定管線矢量點(diǎn)顯示方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及圖像顯示【技術(shù)領(lǐng)域】,特別是涉及一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示方法和裝置。
【背景技術(shù)】
[0002]OpenGL ES (OpenGL for Embedded Systems)是OpenGL (Open Graphics Library)三維圖形API (Application Programming Interface,應(yīng)用程序編程接口 )的子集,針對手機(jī)、PDA(Personal Digital Assistant,掌上電腦)和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。管線又稱之為渲染管線,OpenGL ES在渲染處理過程中會順序執(zhí)行一系列操作,這一系列相關(guān)處理階段被稱之為OpenGL ES渲染管線。目前OpenGL ES支持固定管線和非固定管線(即可編程管線)兩種。
[0003]在使用OpenGL ES渲染引擎的非固定管線進(jìn)行矢量點(diǎn)繪制時(shí),繪制的點(diǎn)只能是方點(diǎn),比如繪制的點(diǎn)的寬度為10,那么顯示出來的點(diǎn)就是邊長為10個(gè)像素點(diǎn)的正方形區(qū)域。但是在實(shí)際應(yīng)用中往往需要圓點(diǎn),現(xiàn)有的方法是預(yù)先準(zhǔn)備圓點(diǎn)位圖,通過對圓點(diǎn)位圖進(jìn)行數(shù)據(jù)讀取、解碼、紋理貼圖等操作顯示該圓點(diǎn)位圖從而間接得到圓點(diǎn)。但是當(dāng)顯示的圓點(diǎn)比較多時(shí),例如10000個(gè),采用現(xiàn)有的圓點(diǎn)位圖方法需要對位圖進(jìn)行解析并進(jìn)行10000次貼圖,操作比較繁瑣。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對上述問題,提供一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示方法和裝置,使其可以真實(shí)高效的顯示矢量圓點(diǎn)。
[0005]一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示方法,包括步驟:
[0006]通過輸入的點(diǎn)的坐標(biāo)、寬度、顏色值獲取所述點(diǎn)的2維方陣;
[0007]根據(jù)所述2維方陣的邏輯坐標(biāo)確定所述2維方陣的內(nèi)接圓半徑;
[0008]從所述2維方陣中獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn);
[0009]將獲取的所述像素點(diǎn)進(jìn)行顏色輸出。
[0010]一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示裝置,包括:
[0011]點(diǎn)著色器,用于通過輸入的點(diǎn)的坐標(biāo)、寬度、顏色值獲取所述點(diǎn)的2維方陣;
[0012]片元著色器,用于根據(jù)所述2維方陣的邏輯坐標(biāo)確定所述2維方陣的內(nèi)接圓半徑,然后從所述2維方陣中獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn),并將獲取的所述像素點(diǎn)進(jìn)行顏色輸出。
[0013]本發(fā)明基于OpenGL ES非固定管線的矢量點(diǎn)顯示方法和裝置,與現(xiàn)有技術(shù)相互比較時(shí),具有以下優(yōu)點(diǎn):
[0014]1、無須借助額外的圓點(diǎn)位圖,直接對2維方陣進(jìn)行篩選,將與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn)進(jìn)行顏色輸出,直接顯示圓點(diǎn),簡單快速,并且當(dāng)需要繪制多個(gè)矢量圓點(diǎn)時(shí),只需重復(fù)執(zhí)行本發(fā)明所提供的方法即可實(shí)現(xiàn),使圓點(diǎn)顯示操作變得簡單高效;
[0015]2、在用OpenGL ES繪制粗線時(shí),通過本發(fā)明程序可以直接在粗線的拐點(diǎn)處補(bǔ)圓點(diǎn),使繪制的粗線變得圓滑,改善粗線的顯示效果。
【專利附圖】
【附圖說明】
[0016] 圖1為本發(fā)明方法實(shí)施例的流程示意圖;
[0017]圖2為本發(fā)明裝置實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0018]下面結(jié)合附圖對本發(fā)明基于OpenGL ES非固定管線矢量點(diǎn)顯示方法的【具體實(shí)施方式】做詳細(xì)描述。
[0019]如圖1所示,一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示方法,包括步驟:
[0020]S100、通過輸入的點(diǎn)的坐標(biāo)、寬度、顏色值獲取所述點(diǎn)的2維方陣,其中點(diǎn)的寬度需要進(jìn)行設(shè)置,否則輸入的點(diǎn)默認(rèn)為一個(gè)像素點(diǎn)大??;
[0021]S200、根據(jù)所述2維方陣的邏輯坐標(biāo)確定所述2維方陣的內(nèi)接圓半徑,內(nèi)接圓半徑可以根據(jù)現(xiàn)有技術(shù)的已知方法獲得,方陣的內(nèi)接圓半徑一般為方陣邊長的一半;邏輯坐標(biāo)是獨(dú)立于設(shè)備的,既可以與設(shè)備單位相同,也可以是自定義的一種單位;
[0022]S300、從所述2維方陣中獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn);
[0023]S400、將獲取的所述像素點(diǎn)進(jìn)行顏色輸出,即將獲取的所述像素點(diǎn)轉(zhuǎn)化成可被渲染到屏幕上的像素點(diǎn),并設(shè)置該像素點(diǎn)的顏色值,由于只對與方陣中心距離不大于內(nèi)接圓半徑的像素點(diǎn)進(jìn)行顏色輸出,所以最后顯示的是圓點(diǎn)。
[0024]本發(fā)明方法可以通過代碼或程序?qū)崿F(xiàn),是OpenGL ES應(yīng)用程序的一部分,可以運(yùn)行在顯卡上。步驟SlOO中的2維方陣的獲取可以通過調(diào)用OpenGL ES的繪制點(diǎn)的函數(shù)實(shí)現(xiàn),例如調(diào)用glDrawArrays (GL_P0INTS, O, pointcount)命令顯卡繪制點(diǎn),通過對OpenGL ES輸入點(diǎn)的坐標(biāo)、寬度、顏色值進(jìn)行光柵化獲取所述點(diǎn)的2維方陣,其中通過對輸入的點(diǎn)光柵化獲取2維方陣的過程可以通過現(xiàn)有技術(shù)實(shí)現(xiàn)。獲取的2維方陣大小為點(diǎn)寬度*點(diǎn)寬度,例如點(diǎn)的寬度為10個(gè)像素點(diǎn),那么獲取的2維方陣即為10*10。
[0025]為了方便的繪制多個(gè)圓點(diǎn)以及調(diào)用OpenGL ES內(nèi)建變量函數(shù),可以將一個(gè)點(diǎn)看作一個(gè)完整的單元,那么所述2維方陣左下角邏輯坐標(biāo)為(0.0, 0.0),方陣中心邏輯坐標(biāo)為(0.5,0.5),右上角邏輯坐標(biāo)為(1.0, 1.0),求出的所述2維方陣的內(nèi)接圓半徑即為0.5。
[0026]以步驟S200中求解出的內(nèi)接圓半徑為篩選條件,計(jì)算所述2維方陣中每個(gè)像素點(diǎn)到方陣中心的距離,其中各像素點(diǎn)到方陣中心的距離可以借助OpenGLES提供的內(nèi)建變量函數(shù)計(jì)算,例如可以根據(jù)公式length(gl_PointCoord-vec (x, y))≤R獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn),其中g(shù)l_PointCoord的值是當(dāng)前像素點(diǎn)的邏輯坐標(biāo),vec(x, y)是方陣中心的邏輯坐標(biāo),length是長度計(jì)算函數(shù),R是所述內(nèi)接圓半徑。若2維方陣的內(nèi)接圓半徑為0.5,方陣中心邏輯坐標(biāo)為(0.5,0.5),那么獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn)的公式就可以變?yōu)閘ength(gl_PointCoord-vec (0.5,0.5)) < 0.5。
[0027]按照步驟S300中方法對2維方陣進(jìn)行篩選之后,即獲取到圓形點(diǎn)陣的像素點(diǎn),對獲取的所述像素點(diǎn)進(jìn)行顏色輸出,使其變?yōu)榭梢燥@示到計(jì)算機(jī)屏幕上的像素點(diǎn),那么顯示出來的圖形即為圓點(diǎn),其中對像素點(diǎn)進(jìn)行顏色輸出以及將所述像素點(diǎn)顯示到計(jì)算機(jī)屏幕上可以通過現(xiàn)有技術(shù)中已知的方法實(shí)現(xiàn)。
[0028]當(dāng)需要繪制其它圓點(diǎn)時(shí),只需要重復(fù)執(zhí)行本發(fā)明提供的方法,即所有的圓點(diǎn)繪制都可以使用該方法,大大提高了圓點(diǎn)顯示的高效性及易用性。同時(shí)在用OpenGL ES繪制粗線時(shí),由于點(diǎn)均為方形,在粗線的拐角處會有小突起,影響粗線的顯示效果,而通過本發(fā)明方法可以直接在粗線的拐點(diǎn)處補(bǔ)圓點(diǎn),使繪制的粗線變得圓滑,大大改善了粗線的顯示效果。
[0029]基于同一發(fā)明構(gòu)思,本發(fā)明還提供一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示裝置,下面結(jié)合附圖對本發(fā)明裝置的【具體實(shí)施方式】做詳細(xì)描述。
[0030]如圖2所示,一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示裝置,包括:
[0031]頂點(diǎn)著色器100,用于通過輸入的點(diǎn)的坐標(biāo)、寬度、顏色值獲取所述點(diǎn)的2維方陣;其中點(diǎn)的寬度需要進(jìn)行設(shè)置,否則輸入的點(diǎn)默認(rèn)為一個(gè)像素點(diǎn)大??;
[0032]片元著色器200,用于根據(jù)所述2維方陣的邏輯坐標(biāo)確定所述2維方陣的內(nèi)接圓半徑,然后從所述2維方陣中獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn),并將獲取的所述像素點(diǎn)進(jìn)行顏色輸出;
[0033]頂點(diǎn)著色器100和片元著色器200是OpenGL ES應(yīng)用程序的一部分,即為代碼模塊,運(yùn)行在顯卡上,繪制速度快;內(nèi)接圓半徑可以根據(jù)現(xiàn)有技術(shù)的已知方法獲得,方陣的內(nèi)接圓半徑一般為方陣邊長的一半;邏輯坐標(biāo)是獨(dú)立于設(shè)備的,既可以與設(shè)備單位相同,也可以是自定義的一種單位;將獲取的所述像素點(diǎn)進(jìn)行顏色輸出,即將獲取的所述像素點(diǎn)轉(zhuǎn)化成可被渲染到屏幕上的像素點(diǎn),由于只對與方陣中心距離不大于內(nèi)接圓半徑的像素點(diǎn)進(jìn)行顏色輸出,所以最后顯示的是圓點(diǎn)。
[0034]2維方陣的獲取可以通過調(diào)用OpenGL ES提供的繪制點(diǎn)的函數(shù)實(shí)現(xiàn),例如,在一個(gè)實(shí)施例中,本發(fā)明裝置還可以包括與頂點(diǎn)著色器100相連的數(shù)據(jù)輸入模塊,用于調(diào)用glDrawArrays (GL_P0INTS, O, pointcount)命令顯卡繪制點(diǎn),將點(diǎn)的坐標(biāo)、寬度、顏色值輸入到所述頂點(diǎn)著色器100,然后所述頂點(diǎn)著色器100對所述點(diǎn)進(jìn)行光柵化獲取所述點(diǎn)的2維方陣,其中通過對輸入的點(diǎn)光柵化獲取2維方陣的過程可以通過現(xiàn)有技術(shù)實(shí)現(xiàn)。獲取的2維方陣大小為點(diǎn)寬度*點(diǎn)寬度,例如點(diǎn)的寬度為10個(gè)像素點(diǎn),那么獲取的2維方陣即為10*10。
[0035]為了方便的繪制多個(gè)圓點(diǎn)以及調(diào)用OpenGL ES內(nèi)建變量函數(shù),在一個(gè)實(shí)施例中,可以將一個(gè)點(diǎn)看作一個(gè)完整的單元,所述2維方陣左下角邏輯坐標(biāo)為(0.0, 0.0),方陣中心邏輯坐標(biāo)為(0.5,0.5),右上角邏輯坐標(biāo)為(1.0,1.0),求出的所述2維方陣的內(nèi)接圓半徑即為 0.5。
[0036]所述片元著色器200以求解出的內(nèi)接圓半徑為篩選條件,計(jì)算所述2維方陣中每個(gè)像素點(diǎn)到方陣中心的距離,其中各像素點(diǎn)到方陣中心的距離可以借助OpenGLES提供的內(nèi)建變量函數(shù)計(jì)算,例如所述片元著色器200可以根據(jù)公式length(gl_PointCoord-vec (x, y))≤R獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn),其中g(shù)l_PointCoord的值是當(dāng)前像素點(diǎn)的邏輯坐標(biāo),vec (x, y)是方陣中心的邏輯坐標(biāo),length是長度計(jì)算函數(shù),R是所述內(nèi)接圓半徑。若2維方陣的內(nèi)接圓半徑為0.5,方陣中心邏輯坐標(biāo)為(0.5,0.5),那么獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn)的公式就可以變?yōu)?length (gl_PointCoord-vec (0.5,0.5)) ≤ 0.5。[0037]所述片元著色器200對2維方陣進(jìn)行篩選之后,即獲取到圓形點(diǎn)陣的像素點(diǎn),對獲取的所述像素點(diǎn)進(jìn)行顏色輸出,使其變?yōu)榭梢燥@示到計(jì)算機(jī)屏幕上的像素點(diǎn),那么顯示出來的圖形即為圓點(diǎn),其中對像素點(diǎn)進(jìn)行顏色輸出以及將所述像素點(diǎn)顯示到計(jì)算機(jī)屏幕上可以通過現(xiàn)有技術(shù)中已知的方法實(shí)現(xiàn)。
[0038]當(dāng)需要繪制其它圓點(diǎn)時(shí),只需要調(diào)用本發(fā)明提供的裝置,即所有的圓點(diǎn)繪制都可以使用該裝置,大大提高了圓點(diǎn)顯示的高效性及易用性,當(dāng)不需要顯示圓點(diǎn)時(shí),可以直接刪除本發(fā)明裝置,不影響現(xiàn)有方形點(diǎn)的正常顯示。同時(shí)在用OpenGL ES繪制粗線時(shí),由于點(diǎn)均為方形,在粗線的拐角處會有小突起,影響粗線的顯示效果,而通過本發(fā)明裝置可以直接在粗線的拐點(diǎn)處補(bǔ)圓點(diǎn),使繪制的粗線變得圓滑,大大改善了粗線的顯示效果。
[0039]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示方法,其特征在于,包括步驟: 通過輸入的點(diǎn)的坐標(biāo)、寬度、顏色值獲取所述點(diǎn)的2維方陣; 根據(jù)所述2維方陣的邏輯坐標(biāo)確定所述2維方陣的內(nèi)接圓半徑; 從所述2維方陣中獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn); 將獲取的所述像素點(diǎn)進(jìn)行顏色輸出。
2.根據(jù)權(quán)利要求1所述的基于OpenGLES非固定管線的矢量點(diǎn)顯示方法,其特征在于,根據(jù)公式length (gl_PointCoord-vec (X,y)) ( R獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn),其中g(shù)l_PointCoord的值是當(dāng)前像素點(diǎn)的邏輯坐標(biāo),vec (x, y)是方陣中心的邏輯坐標(biāo),length是長度計(jì)算函數(shù),R是所述內(nèi)接圓半徑。
3.根據(jù)權(quán)利要求1所述的基于OpenGLES非固定管線的矢量點(diǎn)顯示方法,其特征在于,所述2維方陣左下角邏輯坐標(biāo)為(0.0,0.0),方陣中心邏輯坐標(biāo)為(0.5,0.5),右上角邏輯坐標(biāo)為(I.0, 1.0)。
4.根據(jù)權(quán)利要求1至3任意一項(xiàng)所述的基于OpenGLES非固定管線的矢量點(diǎn)顯示方法,其特征在于,調(diào)用glDrawArrays (GL_P0INTS, O, pointcount)命令顯卡繪制點(diǎn),通過對OpenGL ES輸入點(diǎn)的坐標(biāo)、寬度、顏色值進(jìn)行光柵化獲取所述點(diǎn)的2維方陣。
5.一種基于OpenGL ES非固定管線的矢量點(diǎn)顯示裝置,其特征在于,包括: 頂點(diǎn)著色器,用于通過輸入的點(diǎn)的坐標(biāo)、寬度、顏色值獲取所述點(diǎn)的2維方陣; 片元著色器,用于根據(jù)所述2維方陣的邏輯坐標(biāo)確定所述2維方陣的內(nèi)接圓半徑,然后從所述2維方陣中獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn),并將獲取的所述像素點(diǎn)進(jìn)行顏色輸出。
6.根據(jù)權(quán)利要求5所述的基于OpenGLES非固定管線的矢量點(diǎn)顯示裝置,其特征在于,所述片元著色器根據(jù)公式length (gl_PointCoord-vec (X,y)) ( R獲取與方陣中心距離不大于所述內(nèi)接圓半徑的像素點(diǎn),其中g(shù)l_PointC00rd的值是當(dāng)前像素點(diǎn)的邏輯坐標(biāo),vec(x, y)是方陣中心的邏輯坐標(biāo),length是長度計(jì)算函數(shù),R是所述內(nèi)接圓半徑。
7.根據(jù)權(quán)利要求5所述的基于OpenGLES非固定管線的矢量點(diǎn)顯示裝置,其特征在于,所述2維方陣左下角邏輯坐標(biāo)為(0.0, 0.0),方陣中心邏輯坐標(biāo)為(0.5,0.5),右上角邏輯坐標(biāo)為(I.0, 1.0)。
8.根據(jù)權(quán)利要求5至7任意一項(xiàng)所述的基于OpenGLES非固定管線的矢量點(diǎn)顯示裝置,其特征在于,還包括與頂點(diǎn)著色器相連的數(shù)據(jù)輸入模塊,用于調(diào)用glDrawArrays (GL_POINTS, O, pointcount)命令顯卡繪制點(diǎn),將點(diǎn)的坐標(biāo)、寬度、顏色值輸入到所述頂點(diǎn)著色器,然后所述頂點(diǎn)著色器對所述點(diǎn)進(jìn)行光柵化獲取所述點(diǎn)的2維方陣。
【文檔編號】G06T19/00GK103955965SQ201410182290
【公開日】2014年7月30日 申請日期:2014年4月30日 優(yōu)先權(quán)日:2014年4月30日
【發(fā)明者】陳泓坤 申請人:廣東威創(chuàng)視訊科技股份有限公司