本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,具體涉及一種圖片渲染方法及圖片渲染設(shè)備。
背景技術(shù):
圖片渲染是程序可視圖片生成的一個(gè)重要過程,在游戲等具有圖片渲染需求的應(yīng)用程序中應(yīng)用廣泛;圖片渲染主要是對圖片渲染對象執(zhí)行圖片渲染邏輯實(shí)現(xiàn),圖片渲染對象是圖片渲染所針對的渲染對象,如按鈕控件、美術(shù)字控件、背景圖等需要渲染的圖片對象。
目前的渲染方式主要是生成各圖片渲染對象的渲染順序,依照渲染順序依序?qū)Ω鲌D片渲染對象進(jìn)行渲染,這種渲染方式的渲染效率降低;而提升渲染效率是提升程序運(yùn)行效率的一個(gè)重要途徑,因此研究如何提升渲染效率,成為了本領(lǐng)域技術(shù)人員需要考慮的問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供一種圖片渲染方法及圖片渲染設(shè)備,以提升渲染效率。
為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供如下技術(shù)方案:
確定當(dāng)前界面對應(yīng)的圖片渲染對象;
以所確定的各圖片渲染對象為節(jié)點(diǎn),生成場景樹;
遍歷場景樹中的各節(jié)點(diǎn),并每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;
依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
一種圖片渲染設(shè)備,其特征在于,包括:
渲染對象確定模塊,用于確定當(dāng)前界面對應(yīng)的圖片渲染對象;
場景樹生成模塊,用于以所確定的各圖片渲染對象為節(jié)點(diǎn),生成場景樹;
渲染指令設(shè)置模塊,用于遍歷場景樹中的各節(jié)點(diǎn),并每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;
隊(duì)列排列模塊,用于依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
合并渲染模塊,用于按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
基于上述技術(shù)方案,本發(fā)明實(shí)施例可以確定當(dāng)前界面對應(yīng)的圖片渲染對象,以所確定的各圖片渲染對象為節(jié)點(diǎn),生成場景樹,并遍歷場景樹中的各節(jié)點(diǎn),每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;從而依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;進(jìn)而按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。由于本發(fā)明實(shí)施例可將相同渲染屬性的渲染指令合并在一起進(jìn)行圖片渲染,達(dá)到減少渲染批次的目的,而渲染批次的減少可減小CPU的占用,有利于圖片渲染的統(tǒng)一處理,達(dá)到提高渲染效率的效果。本發(fā)明實(shí)施例提供的圖片渲染方法,可提高渲染效率,提升程序運(yùn)行效率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的圖片渲染方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的圖片渲染方法的另一流程圖;
圖3為設(shè)置節(jié)點(diǎn)的渲染順序的示意圖;
圖4為節(jié)點(diǎn)層次設(shè)置的效果示意圖;
圖5為本發(fā)明實(shí)施例提供的圖片渲染方法的再一流程圖;
圖6為本發(fā)明實(shí)施例提供的圖片渲染方法的又一流程圖;
圖7為本發(fā)明實(shí)施例提供的執(zhí)行圖片渲染的方法流程圖;
圖8為渲染效果比對示意圖;
圖9為本發(fā)明實(shí)施例提供的圖片渲染設(shè)備的結(jié)構(gòu)框圖;
圖10為本發(fā)明實(shí)施例提供的場景樹生成模塊的結(jié)構(gòu)框圖;
圖11為本發(fā)明實(shí)施例提供的渲染指令設(shè)置模塊的結(jié)構(gòu)框圖;
圖12為本發(fā)明實(shí)施例提供的渲染順序確定單元的結(jié)構(gòu)框圖;
圖13為本發(fā)明實(shí)施例提供的隊(duì)列排列模塊的結(jié)構(gòu)框圖;
圖14為本發(fā)明實(shí)施例提供的隊(duì)列排列模塊的另一結(jié)構(gòu)框圖;
圖15為本發(fā)明實(shí)施例提供的合并渲染模塊的結(jié)構(gòu)框圖;
圖16為本發(fā)明實(shí)施例提供的渲染對象確定模塊的結(jié)構(gòu)框圖;
圖17為本發(fā)明實(shí)施例提供的圖片渲染設(shè)備的硬件結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例提供的圖片渲染方法的流程圖,該方法可應(yīng)用于圖片渲染設(shè)備中,圖片渲染設(shè)備可以是具有圖片渲染能力的電子設(shè)備,該圖片渲染設(shè)備可以具有CPU(中央處理器)和/或GPU(圖形處理器);圖片渲染設(shè)備可以如智能手機(jī),平板電腦,筆記本電腦等;
參照圖1,本發(fā)明實(shí)施例提供的圖片渲染方法可以包括:
步驟S100、確定當(dāng)前界面對應(yīng)的圖片渲染對象;
當(dāng)前界面可以是應(yīng)用程序當(dāng)前需要進(jìn)行圖片渲染的界面;當(dāng)前界面的類型可以是游戲應(yīng)用程序的游戲界面,也可以是非游戲應(yīng)用程序的具有圖片渲染需求的UI(用戶界面);當(dāng)前界面可根據(jù)用戶操作調(diào)整,如基于用戶不同的游戲操作,圖片渲染設(shè)備當(dāng)前展現(xiàn)的游戲界面可以不同;
一般而言,應(yīng)用程序的圖片渲染對象可通過相應(yīng)的圖片紋理繪制生成,而圖片紋理一般保存在應(yīng)用程序的安裝包中,因此本發(fā)明實(shí)施例可從圖片渲染設(shè)備的硬盤中保存的應(yīng)用程序的安裝包中調(diào)取圖片紋理,并對調(diào)取的圖片紋理進(jìn)行繪制,生成圖片渲染對象。
步驟S110、以所確定的各圖片渲染對象為節(jié)點(diǎn),生成場景樹;
場景樹是用于管理場景中所有元素的數(shù)據(jù)結(jié)構(gòu),可以理解為是一個(gè)具有根節(jié)點(diǎn),且以根節(jié)點(diǎn)為根掛載有多個(gè)節(jié)點(diǎn)的樹形結(jié)構(gòu);對于每個(gè)節(jié)點(diǎn)來說,父節(jié)點(diǎn)是該節(jié)點(diǎn)掛載于的節(jié)點(diǎn),子節(jié)點(diǎn)是掛載于該節(jié)點(diǎn)的節(jié)點(diǎn);本發(fā)明實(shí)施例可從需渲染的圖片渲染對象中生成根節(jié)點(diǎn)及以根節(jié)點(diǎn)為根所掛載的節(jié)點(diǎn),從而構(gòu)建出場景樹;
通過場景樹的節(jié)點(diǎn)來定義各圖片渲染對象,可以使得所確定的各圖片渲染對象更便于管理和渲染;如修改了一個(gè)節(jié)點(diǎn)的位置信息,則該節(jié)點(diǎn)的所有子節(jié)點(diǎn)的位置信息也將相應(yīng)的變動(dòng)。
步驟S120、遍歷場景樹中的各節(jié)點(diǎn),并每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;
可選的,本發(fā)明實(shí)施例可從場景樹的根節(jié)點(diǎn)開始,遍歷場景樹中的每一節(jié)點(diǎn),且在每遍歷到一個(gè)節(jié)點(diǎn)時(shí),本發(fā)明實(shí)施例并不立即對當(dāng)前遍歷的節(jié)點(diǎn)進(jìn)行圖片渲染,而是設(shè)置當(dāng)前遍歷的節(jié)點(diǎn)的渲染指令(如本發(fā)明實(shí)施例在遍歷到一個(gè)節(jié)點(diǎn)時(shí),并不是立即對該節(jié)點(diǎn)進(jìn)行繪制,而是設(shè)置該節(jié)點(diǎn)的渲染指令);
節(jié)點(diǎn)的渲染指令是提交給GPU用于請求圖片渲染的指令,在本發(fā)明實(shí)施例中,節(jié)點(diǎn)的渲染指令除具有提交給GPU用于請求圖片渲染的功能外,還需至少記錄兩方面的信息:節(jié)點(diǎn)的渲染順序及渲染屬性;
在本發(fā)明實(shí)施例中,節(jié)點(diǎn)的渲染順序主要基于節(jié)點(diǎn)的遍歷順序值和節(jié)點(diǎn)的層次值確定,節(jié)點(diǎn)的層次值表示的是節(jié)點(diǎn)在場景樹中所位于的層次,節(jié)點(diǎn)的遍歷順序值是節(jié)點(diǎn)對應(yīng)的遍歷順序的序數(shù);
節(jié)點(diǎn)的渲染屬性主要表示節(jié)點(diǎn)在渲染時(shí)使用的基礎(chǔ)信息,如節(jié)點(diǎn)在渲染時(shí)所使用的著色器程序,著色器參數(shù),節(jié)點(diǎn)的紋理ID等(節(jié)點(diǎn)在渲染可以理解為節(jié)點(diǎn)對應(yīng)的圖片渲染對象在渲染)。
步驟S130、依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
本發(fā)明實(shí)施例可設(shè)置有預(yù)定指令隊(duì)列,該預(yù)定指令隊(duì)列用于排列各圖片渲染對象對應(yīng)的渲染指令(即各節(jié)點(diǎn)對應(yīng)的渲染指令);本發(fā)明實(shí)施例可依據(jù)對各節(jié)點(diǎn)所設(shè)置的渲染順序,定義各節(jié)點(diǎn)的渲染指令在預(yù)定指令隊(duì)列中的排列順序;
可選的,本發(fā)明實(shí)施例可遵循節(jié)點(diǎn)的渲染順序越大,渲染指令排序越靠后的原則,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
可選的,本發(fā)明實(shí)施例可在遍歷到一個(gè)節(jié)點(diǎn),并設(shè)置該節(jié)點(diǎn)的渲染指令后,即將該節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;也可是在遍歷完所有節(jié)點(diǎn),并設(shè)置完所有節(jié)點(diǎn)的渲染指令后,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中。
步驟S140、按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
在本發(fā)明實(shí)施例中,具有相同渲染屬性的渲染指令在進(jìn)行渲染時(shí)所使用的基礎(chǔ)信息是相同的,因此可將相同渲染屬性的渲染指令相合并,以將相同渲染屬性的渲染指令合批渲染;同時(shí),為考慮各圖片渲染對象的渲染順序,本發(fā)明實(shí)施例可按照預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,從而實(shí)現(xiàn)合批渲染的目的;
本發(fā)明實(shí)施例可將相同渲染屬性的渲染指令合并在一起提交給GPU來進(jìn)行圖片渲染,從而達(dá)到減少渲染批次的目的;渲染批次(draw call)指的是在進(jìn)行圖片渲染時(shí),CPU每秒對圖形API(如opengl/dx等)的調(diào)用次數(shù),調(diào)用的次數(shù)越少,則CPU和GPU的數(shù)據(jù)傳輸就越少,CPU的占用就越低,越有利于GPU統(tǒng)一處理圖片渲染,提高渲染效率,從而提升程序運(yùn)行效率。
可選的,對于場景樹,一般采取深度遍歷方式遍歷場景樹中的各節(jié)點(diǎn),這主要出于便捷和性能考慮;本發(fā)明的發(fā)明人在研究過程中發(fā)現(xiàn),若以深度遍歷方式遍歷場景樹中的各節(jié)點(diǎn),將出現(xiàn)具有相同渲染屬性而分屬不同父節(jié)點(diǎn)下的渲染指令無法合并的情況,即渲染屬性相同但父節(jié)點(diǎn)不同的渲染指令無法進(jìn)行合批;為解決這一問題,本發(fā)明實(shí)施例在生成場景樹時(shí),可將渲染屬性相同的圖片渲染對象,設(shè)置在同一節(jié)點(diǎn)層次,從而生成至少一個(gè)節(jié)點(diǎn)層次,且使不同節(jié)點(diǎn)層次間的圖片渲染對象的渲染屬性不同;
進(jìn)而在以深度遍歷方式遍歷場景樹中的各節(jié)點(diǎn)時(shí),基于節(jié)點(diǎn)的遍歷順序值和節(jié)點(diǎn)的層次值確定節(jié)點(diǎn)的渲染順序,實(shí)現(xiàn)在以深度遍歷方式遍歷場景樹的情況下,對于所遍歷的各節(jié)點(diǎn),生成廣度遍歷的渲染順序;
圖2示出了本發(fā)明實(shí)施例提供的圖片渲染方法的另一流程圖,參照圖2,該方法可以包括:
步驟S200、確定當(dāng)前界面對應(yīng)的圖片渲染對象;
步驟S210、以圖片渲染對象為節(jié)點(diǎn),生成場景樹的至少一個(gè)節(jié)點(diǎn)層次,并將渲染屬性相同的圖片渲染對象,設(shè)置在同一節(jié)點(diǎn)層次,使不同節(jié)點(diǎn)層次間的圖片渲染對象的渲染屬性不同;
步驟S220、以深度遍歷方式遍歷場景樹中的各節(jié)點(diǎn),每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),確定當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,結(jié)合當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,確定當(dāng)前遍歷節(jié)點(diǎn)的渲染順序;以當(dāng)前遍歷節(jié)點(diǎn)的渲染順序及渲染屬性,設(shè)置當(dāng)前遍歷節(jié)點(diǎn)的渲染指令;
可選的,在設(shè)置當(dāng)前遍歷節(jié)點(diǎn)的渲染順序時(shí),本發(fā)明實(shí)施例可將當(dāng)前遍歷順序值設(shè)置在渲染順序的低位,將當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值設(shè)置在渲染順序的高位,以得到當(dāng)前遍歷節(jié)點(diǎn)的渲染順序;
為便于理解,圖3示出了設(shè)置節(jié)點(diǎn)的渲染順序的示意圖,如圖3所示,節(jié)點(diǎn)A、B、A1、A2、B1、B2為場景樹中的節(jié)點(diǎn),且節(jié)點(diǎn)A、B設(shè)置在第一層次,對應(yīng)的節(jié)點(diǎn)層次值為1,節(jié)點(diǎn)A1、A2、B1、B2設(shè)置在第二層次,對應(yīng)的節(jié)點(diǎn)層次為2;以深度遍歷方式遍歷場景樹中的各節(jié)點(diǎn),則遍歷順序可以是A、A1、A2、B、B1、B2;相應(yīng)的,A的遍歷順序值是1,A1的遍歷順序值是2,A2的遍歷順序值是3,B的遍歷順序值是4,B1的遍歷順序值是5,B2的遍歷順序值是6,圖中虛線表示遍歷順序;
則在遍歷到A節(jié)點(diǎn)時(shí),可確定A的當(dāng)前遍歷順序值為1,節(jié)點(diǎn)層次值為1,將當(dāng)前遍歷順序值設(shè)置在渲染順序的低位,將節(jié)點(diǎn)層次值設(shè)置在渲染順序的高位,如以高位為百位,低位為個(gè)位,則A的渲染順序可以是101;下一個(gè)遍歷到A1時(shí),A1的當(dāng)前遍歷順序值為2,節(jié)點(diǎn)層次值為2,將當(dāng)前遍歷順序值設(shè)置在渲染順序的低位,將節(jié)點(diǎn)層次值設(shè)置在渲染順序的高位,則A1的渲染順序?yàn)?02;下一個(gè)遍歷到A2時(shí),A2的當(dāng)前遍歷順序值為3,節(jié)點(diǎn)層次值為2,將當(dāng)前遍歷順序值設(shè)置在渲染順序的低位,將節(jié)點(diǎn)層次值設(shè)置在渲染順序的高位,則A1的渲染順序?yàn)?03;同理,B的渲染順序?yàn)?04,B1的渲染順序?yàn)?05,B2的渲染順序?yàn)?06;由此,位于同一節(jié)點(diǎn)層次的節(jié)點(diǎn)的渲染順序,其高位是一致的,從而在以深度遍歷方式遍歷場景樹的情況下,生成廣度遍歷的渲染順序;
可選的,高位為百位,低位為個(gè)位僅為可選示意,本發(fā)明實(shí)施例并不排除其他的高位形式和低位形式,只要渲染順序中當(dāng)前遍歷順序值所在單位,低于節(jié)點(diǎn)層次值所在單位。
步驟S230、依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
步驟S240、按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
可選的,本發(fā)明實(shí)施例可對圖片渲染對象的資源進(jìn)行修改,以將渲染屬性相同的圖片渲染對象設(shè)置在同一節(jié)點(diǎn)層次;如圖4所示,本發(fā)明實(shí)施例可將渲染屬性相同(如紋理ID,著色器程序、著色器參數(shù)等相同)的背景圖設(shè)置在第一節(jié)點(diǎn)層次,將按鈕和美術(shù)字控件設(shè)置在第二節(jié)點(diǎn)層次,則不同列表元素(Cell)中的背景圖(bg)節(jié)點(diǎn),所得到的渲染順序的高位始終是1,其必定小于其他層次的節(jié)點(diǎn)的渲染順序,如圖4中的button(按鈕)和label(標(biāo)簽)等渲染順序都是200以上的數(shù)值;由此,在依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中后,多個(gè)背景圖(bg)節(jié)點(diǎn)得以聚合在一起,即相同渲染屬性的渲染指令可聚合在一起,從而可提高將相同渲染屬性的渲染指令合并的效率。
可選的,本發(fā)明實(shí)施例可在遍歷到一節(jié)點(diǎn),并設(shè)置該節(jié)點(diǎn)的渲染指令后,根據(jù)該節(jié)點(diǎn)的渲染順序,依照節(jié)點(diǎn)的渲染順序越大,渲染指令排序越靠后的原則,將該節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
相應(yīng)的,圖5示出了本發(fā)明實(shí)施例提供的圖片渲染方法的再一流程圖,參照圖5,該方法可以包括:
步驟S300、確定當(dāng)前界面對應(yīng)的圖片渲染對象;
步驟S310、以圖片渲染對象為節(jié)點(diǎn),生成場景樹的至少一個(gè)節(jié)點(diǎn)層次,并將渲染屬性相同的圖片渲染對象,設(shè)置在同一節(jié)點(diǎn)層次,使不同節(jié)點(diǎn)層次間的圖片渲染對象的渲染屬性不同;
步驟S320、以深度遍歷方式遍歷場景樹中的節(jié)點(diǎn);
步驟S330、遍歷到一節(jié)點(diǎn),確定當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,結(jié)合當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,確定當(dāng)前遍歷節(jié)點(diǎn)的渲染順序;以當(dāng)前遍歷節(jié)點(diǎn)的渲染順序及渲染屬性,設(shè)置當(dāng)前遍歷節(jié)點(diǎn)的渲染指令;
可選的,本發(fā)明實(shí)施例可將當(dāng)前遍歷順序值設(shè)置在渲染順序的低位,將當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值設(shè)置在渲染順序的高位,以得到當(dāng)前遍歷節(jié)點(diǎn)的渲染順序。
步驟S340、根據(jù)當(dāng)前遍歷節(jié)點(diǎn)的渲染順序,確定預(yù)定指令隊(duì)列中排列的渲染順序小于且最接近所述當(dāng)前遍歷節(jié)點(diǎn)的渲染順序的渲染指令,將所述當(dāng)前遍歷節(jié)點(diǎn)的渲染順序,排列在所確定的渲染指令之后;
在設(shè)置當(dāng)前遍歷節(jié)點(diǎn)的渲染指令后,預(yù)定指令隊(duì)列中可能已排列有先于當(dāng)前遍歷節(jié)點(diǎn)遍歷的節(jié)點(diǎn)的渲染指令,基于節(jié)點(diǎn)的渲染順序越大,渲染指令排序越靠后的原則,本發(fā)明實(shí)施例可確定預(yù)定指令隊(duì)列中排序的渲染順序小于且最接近當(dāng)前遍歷節(jié)點(diǎn)的渲染順序的渲染指令,從而將當(dāng)前遍歷節(jié)點(diǎn)的渲染指令設(shè)置在該渲染指令之后;
為便于理解,以當(dāng)前遍歷節(jié)點(diǎn)的渲染順序?yàn)?02,預(yù)定指令隊(duì)列中已排列的渲染指令的渲染順序?yàn)?01,102,201為例,則預(yù)定指令隊(duì)列中,渲染順序小于且最接近202的為201,因此當(dāng)前遍歷節(jié)點(diǎn)的渲染指令可排列在渲染順序?yàn)?01的渲染指令之后。
步驟S350、判斷是否存在下一可遍歷到的節(jié)點(diǎn),若是,返回步驟S330,若否,執(zhí)行步驟S360;
步驟S360、按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
可選的,本發(fā)明實(shí)施例也可在遍歷完所有節(jié)點(diǎn),并設(shè)置完所有節(jié)點(diǎn)的渲染指令后,根據(jù)渲染順序越大,渲染指令排列越靠后的原則,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
相應(yīng)的,圖6示出了本發(fā)明實(shí)施例提供的圖片渲染方法的又一流程圖,參照圖6,該方法可以包括:
步驟S400、確定當(dāng)前界面對應(yīng)的圖片渲染對象;
步驟S410、以圖片渲染對象為節(jié)點(diǎn),生成場景樹的至少一個(gè)節(jié)點(diǎn)層次,并將渲染屬性相同的圖片渲染對象,生成在同一節(jié)點(diǎn)層次,使不同節(jié)點(diǎn)層次間的圖片渲染對象的渲染屬性不同;
步驟S420、以深度遍歷方式遍歷場景樹中的節(jié)點(diǎn);
步驟S430、遍歷到一節(jié)點(diǎn),確定當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,結(jié)合當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,確定當(dāng)前遍歷節(jié)點(diǎn)的渲染順序;以當(dāng)前遍歷節(jié)點(diǎn)的渲染順序及渲染屬性,設(shè)置當(dāng)前遍歷節(jié)點(diǎn)的渲染指令;
步驟S440、判斷是否存在下一可遍歷到的節(jié)點(diǎn),若是,返回步驟S430,若否,執(zhí)行步驟S450;
步驟S450、基于所設(shè)置的各節(jié)點(diǎn)的渲染順序,根據(jù)渲染順序越大,渲染指令排列越靠后的原則,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
步驟S460、按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
在將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中后,本發(fā)明實(shí)施例可按照預(yù)定指令隊(duì)列中各渲染指令的排列順序,逐個(gè)遍歷渲染指令;如果判斷到當(dāng)前遍歷的渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性相同,則可將當(dāng)前遍歷的渲染指令與已緩存的渲染指令相合并;如果判斷到當(dāng)前遍歷的渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性不同,則可執(zhí)行已緩存的渲染指令,對已緩存的渲染指令進(jìn)行圖片渲染,并緩存當(dāng)前遍歷的渲染指令;
可見,已緩存的渲染指令可能是上一遍歷的渲染指令,對應(yīng)上一遍歷的渲染指令與上兩次遍歷的渲染指令的渲染屬性不同的情況;已緩存的渲染指令可能是至少兩個(gè)渲染指令相合并后的渲染指令,且該至少兩個(gè)渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性相同,對應(yīng)遍歷到渲染屬性相同的連續(xù)的渲染指令的情況;
可選的,圖7示出了本發(fā)明實(shí)施例提供的對預(yù)定指令隊(duì)列中的渲染指令執(zhí)行圖片渲染的方法流程圖,參照圖7,該方法可以包括:
步驟S500、按照預(yù)定指令隊(duì)列中各渲染指令的排列順序,逐個(gè)遍歷各渲染指令;
步驟S510、遍歷到一渲染指令,判斷當(dāng)前遍歷的渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性是否相同,若是,執(zhí)行步驟S520,若否,執(zhí)行步驟S530;
步驟S520、將當(dāng)前遍歷的渲染指令與已緩存的渲染指令相合并;
可選的,已緩存的渲染指令可以是上一遍歷的渲染指令,或者,至少兩個(gè)渲染指令相合并后的渲染指令,且所述至少兩個(gè)渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性相同。
步驟S530、對已緩存的渲染指令進(jìn)行圖片渲染,并緩存當(dāng)前遍歷的渲染指令;
步驟S540、判斷是否存在下一可遍歷到的渲染指令,若是,返回步驟S510,若否,結(jié)束流程。
本發(fā)明實(shí)施例提供的圖片渲染方法,可將相同渲染屬性的渲染指令合并在一起進(jìn)行圖片渲染,達(dá)到減少渲染批次的目的,以有利于GPU統(tǒng)一處理圖片渲染,提高渲染效率;進(jìn)一步,可在以深度遍歷方式遍歷場景樹的情況下,對于所遍歷的各節(jié)點(diǎn),生成廣度遍歷的渲染順序,使得相同渲染屬性的渲染指令可聚合在一起,提高將相同渲染屬性的渲染指令合并的效率。
本發(fā)明實(shí)施例提供的圖片渲染方法可應(yīng)用于游戲中,對游戲圖片進(jìn)行渲染;該游戲是指以計(jì)算機(jī)圖形為基礎(chǔ)制作的電子游戲,如以三維計(jì)算機(jī)圖形為基礎(chǔ)制作的立體電子游戲,二維電子游戲等;游戲類型包括但不限于多人在線聯(lián)機(jī)的網(wǎng)絡(luò)游戲,單人進(jìn)行游戲的單人游戲,和基于游戲系統(tǒng)建立的虛擬現(xiàn)實(shí)游戲,并且對平臺(tái)具有通用適用屬性,游戲主機(jī)平臺(tái),手機(jī)游戲平臺(tái),PC(個(gè)人計(jì)算)端游戲平臺(tái)內(nèi)的游戲都包含在內(nèi);
相應(yīng)的,本發(fā)明實(shí)施例在確定當(dāng)前界面對應(yīng)的圖片渲染對象時(shí),可確定當(dāng)前游戲界面對應(yīng)的游戲圖片紋理,游戲圖片紋理一般保存在游戲安裝包中;而對于網(wǎng)絡(luò)游戲而言,當(dāng)前游戲界面需展示的游戲圖片紋理一般由游戲服務(wù)器告知,并由游戲客戶端從游戲安裝包中相應(yīng)調(diào)??;游戲客戶端可以認(rèn)為是圖片渲染設(shè)備中安裝的為游戲提供本地服務(wù)的程式;
因此當(dāng)用戶操作游戲客戶端展示一個(gè)新的當(dāng)前游戲界面時(shí),游戲客戶端可獲取當(dāng)前游戲界面對應(yīng)的游戲圖片紋理ID,從硬盤存儲(chǔ)的游戲安裝包的圖片紋理中確定與所述游戲圖片紋理ID對應(yīng)的游戲圖片紋理;進(jìn)而將所確定的游戲圖片紋理加載在內(nèi)存中;通過預(yù)定的圖片繪制接口(如OPENGL,OPENGL為一種圖形程序接口,可用于圖形的繪制)對內(nèi)存中所加載的游戲圖片紋理進(jìn)行繪制處理,得到所述當(dāng)前游戲界面對應(yīng)的圖片渲染對象;
一個(gè)游戲所擁有的游戲界面或場景一般在游戲設(shè)計(jì)時(shí)已預(yù)定義好,而圖片渲染設(shè)備當(dāng)前展示的游戲界面可根據(jù)用戶的操作進(jìn)行調(diào)整,即用戶的不同操作將觸使游戲客戶端從預(yù)定義的游戲界面中選取當(dāng)前游戲界面并加載;
而在加載當(dāng)前游戲界面時(shí),需要對游戲界面中的圖片進(jìn)行渲染,本發(fā)明實(shí)施例則可先從硬盤的游戲安裝包中獲取當(dāng)前游戲界面對應(yīng)的游戲圖片紋理并加載在內(nèi)存中(當(dāng)前游戲界面可對應(yīng)有游戲圖片紋理ID,從而通過當(dāng)前游戲界面對應(yīng)的游戲圖片紋理ID,可從游戲安裝包中獲取當(dāng)前游戲界面對應(yīng)的游戲圖片紋理);進(jìn)而通過預(yù)定的圖片繪制接口對內(nèi)存中的游戲圖片紋理進(jìn)行繪制處理,得到當(dāng)前游戲界面對應(yīng)的圖片渲染對象;再以所確定的各圖片渲染對象為節(jié)點(diǎn),生成場景樹;遍歷場景樹中的各節(jié)點(diǎn),并每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行游戲圖片的渲染,達(dá)到減少游戲圖片的渲染批次,提高當(dāng)前游戲界面的圖片渲染效率的目的。
以卡牌類手機(jī)游戲?yàn)槔绻脩舨僮鬟M(jìn)入一個(gè)卡牌的展示界面,則游戲服務(wù)器基于用戶操作可通知用戶所使用的手游卡牌客戶端當(dāng)前的卡牌展示界面對應(yīng)的卡牌紋理ID,手游卡牌客戶端可基于該卡牌紋理ID從卡牌游戲的安裝包中調(diào)取相應(yīng)的卡牌紋理;手游卡牌客戶端可以是圖片渲染設(shè)備(相應(yīng)的,圖片渲染設(shè)備可以是手機(jī)等移動(dòng)終端)中裝載的為卡牌類手機(jī)游戲提供本地服務(wù)的程式;
進(jìn)而,手游卡牌客戶端可將所調(diào)取的卡牌紋理保存在內(nèi)存中,并通過OPENGL接口對內(nèi)存中保存的卡牌紋理進(jìn)行繪制處理,得到相應(yīng)的卡牌的按鈕控件、美術(shù)字控件、背景圖等卡牌渲染對象;
手游卡牌客戶端可以各卡牌渲染對象為節(jié)點(diǎn),生成場景樹;在進(jìn)行卡牌渲染時(shí),遍歷場景樹中的各節(jié)點(diǎn),并每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行卡牌的渲染,實(shí)現(xiàn)卡牌在游戲界面中的展示;本發(fā)明實(shí)施例可在卡牌類手機(jī)游戲進(jìn)行卡牌展示時(shí),減少卡牌的渲染批次,提高卡牌的渲染效率。
為體現(xiàn)本發(fā)明實(shí)施例提供的圖片渲染方法的優(yōu)勢,圖8示出了本發(fā)明實(shí)施例提供的圖片渲染方法的渲染效果,與采用cocos2dx3.x技術(shù)的渲染效果的比對示意圖,cocos2dx3.x技術(shù)為目前常用的圖片渲染技術(shù);通過圖8可看出,采用cocos2dx3.x技術(shù)時(shí),渲染批次(Draw Call)為162,而采用本發(fā)明實(shí)施例提供的圖片渲染方法,同一圖片的渲染批次降至116,本發(fā)明實(shí)施例較大的提升了渲染效率。
下面對本發(fā)明實(shí)施例提供的圖片渲染設(shè)備進(jìn)行介紹,下文描述的圖片渲染設(shè)備可與上文描述的圖片渲染方法相互對應(yīng)參照。下文描述的圖片渲染設(shè)備可以認(rèn)為是,為實(shí)現(xiàn)本發(fā)明實(shí)施例提供的圖片渲染功能,圖片渲染設(shè)備需設(shè)置的功能模塊結(jié)構(gòu)。
圖9為本發(fā)明實(shí)施例提供的圖片渲染設(shè)備的結(jié)構(gòu)框圖,該圖片渲染設(shè)備可以是具有圖片渲染能力的電子設(shè)備,如智能手機(jī),平板電腦,筆記本電腦等;參照圖9,該圖片渲染設(shè)備可以包括:
渲染對象確定模塊100,用于確定當(dāng)前界面對應(yīng)的圖片渲染對象;
場景樹生成模塊200,用于以所確定的各圖片渲染對象為節(jié)點(diǎn),生成場景樹;
渲染指令設(shè)置模塊300,用于遍歷場景樹中的各節(jié)點(diǎn),并每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;
隊(duì)列排列模塊400,用于依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
合并渲染模塊500,用于按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
可選的,圖10示出了本發(fā)明實(shí)施例提供的場景樹生成模塊200的可選結(jié)構(gòu),參照圖10,場景樹生成模塊200可以包括:
節(jié)點(diǎn)層次生成單元210,用于以圖片渲染對象為節(jié)點(diǎn),生成場景樹的至少一個(gè)節(jié)點(diǎn)層次,并將渲染屬性相同的圖片渲染對象,設(shè)置在同一節(jié)點(diǎn)層次,使不同節(jié)點(diǎn)層次間的圖片渲染對象的渲染屬性不同。
可選的,圖11示出了本發(fā)明實(shí)施例提供的渲染指令設(shè)置模塊300的可選結(jié)構(gòu),參照圖11,渲染指令設(shè)置模塊300可以包括:
渲染順序確定單元310,用于以深度遍歷方式遍歷場景樹中的各節(jié)點(diǎn),每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),確定當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,結(jié)合當(dāng)前遍歷順序值及當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值,確定當(dāng)前遍歷節(jié)點(diǎn)的渲染順序;
指令設(shè)置單元320,用于以當(dāng)前遍歷節(jié)點(diǎn)的渲染順序及渲染屬性,設(shè)置當(dāng)前遍歷節(jié)點(diǎn)的渲染指令。
可選的,圖12示出了本發(fā)明實(shí)施例提供的渲染順序確定單元310的可選結(jié)構(gòu),參照圖12,渲染順序確定單元310可以包括:
單位設(shè)置單元311,用于將當(dāng)前遍歷順序值設(shè)置在渲染順序的低位,當(dāng)前遍歷節(jié)點(diǎn)的節(jié)點(diǎn)層次值設(shè)置在所述渲染順序的高位,以得到當(dāng)前遍歷節(jié)點(diǎn)的渲染順序。
可選的,本發(fā)明實(shí)施例每在遍歷到一個(gè)節(jié)點(diǎn),并設(shè)置該節(jié)點(diǎn)的渲染指令后,隊(duì)列排列模塊400可將該節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;相應(yīng)的,圖13示出了本發(fā)明實(shí)施例提供的隊(duì)列排列模塊400的可選結(jié)構(gòu),參照圖13,隊(duì)列排列模塊400可以包括:
第一排列執(zhí)行單元410,用于根據(jù)當(dāng)前遍歷節(jié)點(diǎn)的渲染順序,確定所述預(yù)定指令隊(duì)列中排列的渲染順序小于且最接近所述當(dāng)前遍歷節(jié)點(diǎn)的渲染順序的渲染指令,將所述當(dāng)前遍歷節(jié)點(diǎn)的渲染順序,排列在所確定的渲染指令之后。
可選的,本發(fā)明實(shí)施例在遍歷完所有節(jié)點(diǎn),并設(shè)置完所有節(jié)點(diǎn)的渲染指令后,隊(duì)列排列模塊400可將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;相應(yīng)的,圖14示出了本發(fā)明實(shí)施例提供的隊(duì)列排列模塊400的另一可選結(jié)構(gòu),參照圖14,隊(duì)列排列模塊400可以包括:
第二排列執(zhí)行單元420用于:在確定各節(jié)點(diǎn)的渲染順序后,根據(jù)渲染順序越大,渲染指令排列越靠后的原則,將各節(jié)點(diǎn)的渲染指令排列在所述預(yù)定指令隊(duì)列中。
可選的,圖15示出了本發(fā)明實(shí)施例提供的合并渲染模塊500的可選結(jié)構(gòu),參照圖15,合并渲染模塊500可以包括:
指令逐個(gè)遍歷單元510,用于按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,逐個(gè)遍歷各渲染指令;
指令合并單元520,用于若當(dāng)前遍歷的渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性相同,將當(dāng)前遍歷的渲染指令與已緩存的渲染指令相合并;所述已緩存的渲染指令為上一遍歷的渲染指令,或,至少兩個(gè)渲染指令相合并后的渲染指令,所述至少兩個(gè)渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性相同;
渲染執(zhí)行及指令緩存單元530,用于若當(dāng)前遍歷的渲染指令的渲染屬性與上一遍歷的渲染指令的渲染屬性不同,對已緩存的渲染指令進(jìn)行圖片渲染,并緩存當(dāng)前遍歷的渲染指令。
可選的,圖16示出了本發(fā)明實(shí)施例提供的渲染對象確定模塊100的可選結(jié)構(gòu),參照圖16,渲染對象確定模塊100可以包括:
游戲圖片紋理確定單元110,用于獲取當(dāng)前游戲界面對應(yīng)的游戲圖片紋理ID,從硬盤存儲(chǔ)的游戲安裝包的圖片紋理中確定與所述游戲圖片紋理ID對應(yīng)的游戲圖片紋理;
內(nèi)存加載單元120,用于將所確定的游戲圖片紋理加載在內(nèi)存中;
紋理繪制處理單元130,用于通過預(yù)定的圖片繪制接口對內(nèi)存中所加載的游戲圖片紋理進(jìn)行繪制處理,得到所述當(dāng)前游戲界面對應(yīng)的圖片渲染對象。
本發(fā)明實(shí)施例提供的圖片渲染設(shè)備,可將相同渲染屬性的渲染指令合并在一起進(jìn)行圖片渲染,達(dá)到減少渲染批次的目的,以有利于GPU統(tǒng)一處理圖片渲染,提高渲染效率;進(jìn)一步,可在以深度遍歷方式遍歷場景樹的情況下,對于所遍歷的各節(jié)點(diǎn),生成廣度遍歷的渲染順序,使得相同渲染屬性的渲染指令可聚合在一起,提高將相同渲染屬性的渲染指令合并的效率。
圖17示出了本發(fā)明實(shí)施例提供的圖片渲染設(shè)備的硬件結(jié)構(gòu)框圖,參照圖17,該圖片渲染設(shè)備可以包括:處理器1,通信接口2,存儲(chǔ)器3,通信總線4和圖形處理器5;
其中處理器1、通信接口2、存儲(chǔ)器3、圖形處理器5通過通信總線4完成相互間的通信;
可選的,通信接口2可以為通信模塊的接口,如GSM模塊的接口;
處理器1,用于執(zhí)行程序;
存儲(chǔ)器3,用于存放程序;
程序可以包括程序代碼,所述程序代碼包括計(jì)算機(jī)操作指令。
處理器1可能是一個(gè)中央處理器CPU,或者是特定集成電路ASIC(Application Specific Integrated Circuit),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路。
存儲(chǔ)器3可能包含高速RAM存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤存儲(chǔ)器。
其中,程序可具體用于:
確定當(dāng)前界面對應(yīng)的圖片渲染對象;
以所確定的各圖片渲染對象為節(jié)點(diǎn),生成場景樹;
遍歷場景樹中的各節(jié)點(diǎn),并每在遍歷到一個(gè)節(jié)點(diǎn)時(shí),設(shè)置該節(jié)點(diǎn)的渲染指令,所述渲染指令至少包括渲染順序及渲染屬性;
依據(jù)各節(jié)點(diǎn)的渲染順序,將各節(jié)點(diǎn)的渲染指令排列在預(yù)定指令隊(duì)列中;
按照所述預(yù)定指令隊(duì)列中各渲染指令的排列順序,將相同渲染屬性的渲染指令相合并,以合并后的渲染指令進(jìn)行圖片渲染。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所生成的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。