成的三維圖像的真實(shí)感。在計(jì)算機(jī)圖形學(xué)中,“紋理”通常是指一張表示物體表面細(xì)節(jié)的位圖。舉例而言,Direct3D中所有紋理都是位圖,可以把任何位圖貼到Direct3D圖元的表面。例如,應(yīng)用程序可以創(chuàng)建物體并使它們的表面看起來有木紋的樣式。可以把草、泥土和巖石等紋理貼在構(gòu)成山的圖元的表面,得到看起來很真實(shí)的山坡。應(yīng)用程序也可以用紋理創(chuàng)建其它的效果,如:路邊的路標(biāo),懸崖邊的巖層,或是地面上的大理石。另外,Direct3D支持更高級的紋理技術(shù),如紋理混合(包含或不含透明度)和光照貼圖。
[0056]但是,受限于AS3語言本身的弱點(diǎn),計(jì)算和處理大量紋理數(shù)據(jù)的性能與C/C++語言相比效率相差很遠(yuǎn),可能導(dǎo)致畫面更新不及時(shí),卡頓,幀率降低等。因此,本發(fā)明實(shí)施例中,采用C/C++等實(shí)現(xiàn)數(shù)據(jù)處理速度較快的高性能模塊,來完成比較耗費(fèi)性能的大量計(jì)算、圖像處理等復(fù)雜操作的程序任務(wù)(復(fù)雜任務(wù)),并且將處理后的數(shù)據(jù)結(jié)果(待渲染數(shù)據(jù))回傳給AS3,與采用AS3直接處理大量數(shù)據(jù)的方式相比,從而大幅提高數(shù)據(jù)處理速度,得到更好的渲染效果。
[0057]圖1示出根據(jù)本發(fā)明一實(shí)施例的渲染方法的流程圖。如圖1所示,該渲染方法主要可以包括:
[0058]步驟101、主模塊根據(jù)需要執(zhí)行的渲染任務(wù)向?qū)?yīng)的高性能模塊發(fā)送包括待處理數(shù)據(jù)的第一數(shù)據(jù)流對象。
[0059]其中,主模塊例如AS3可以根據(jù)開發(fā)人員的操作,確定需要執(zhí)行的渲染任務(wù)。一個(gè)場景中需要執(zhí)行的渲染任務(wù)可以有多種。具體的渲染任務(wù)的確定與開發(fā)人員所要實(shí)現(xiàn)的顯示效果有關(guān),例如設(shè)置粒子顏色、生成花瓣隨機(jī)飄落的效果、生成飛機(jī)路徑示意圖的效果等。其中,可以預(yù)先生成多個(gè)高性能模塊,每個(gè)高性能模塊能夠?qū)?yīng)執(zhí)行一個(gè)渲染任務(wù)所需要的數(shù)據(jù)處理操作,例如利用貝塞爾曲線、曲線方程、正弦余弦等數(shù)學(xué)公式對待處理數(shù)據(jù)進(jìn)行計(jì)算。
[0060]因此,在步驟101之前,該渲染方法還可以包括:預(yù)先設(shè)置多種渲染任務(wù)對應(yīng)的快速處理代碼;對各所述快速處理代碼進(jìn)行編譯,分別生成對應(yīng)的高性能模塊及其接口模塊。舉例而言,高性能模塊可以采用數(shù)據(jù)處理速度更快的C/C++來實(shí)現(xiàn)。例如采用C/C++編寫的各種渲染任務(wù)的程序,并采用編譯工具將編寫的C/C++程序編譯生成AS3能夠讀取的SWC文件,從而實(shí)現(xiàn)某一渲染任務(wù)所需要高性能模塊進(jìn)行的數(shù)據(jù)處理操作。
[0061]此外,根據(jù)渲染任務(wù)的復(fù)雜程度的不同,開發(fā)人員可以選擇是直接采用AS3處理該渲染任務(wù)的數(shù)據(jù),還是采用C/C++處理該渲染任務(wù)的數(shù)據(jù)。因此,步驟101具體可以包括:在判斷所述渲染任務(wù)的為復(fù)雜任務(wù)的情況下,所述主模塊通過與所述渲染任務(wù)對應(yīng)的接口模塊,向與所述渲染任務(wù)對應(yīng)的高性能模塊發(fā)送包括所述待處理數(shù)據(jù)的所述第一數(shù)據(jù)流對象。
[0062]其中,判斷渲染任務(wù)是否為復(fù)雜任務(wù),可以有多種方法。舉例而言,對于某一渲染任務(wù),開發(fā)人員可以預(yù)先采用AS3和C/C++分別編寫對應(yīng)的代碼,然后測試兩種代碼的數(shù)據(jù)處理速度、CPU占用率、幀率等性能指標(biāo),如果C/C++代碼的總體性能優(yōu)于AS3代碼,并超過一定閾值,例如:C/C++代碼的數(shù)據(jù)處理速度為AS3代碼的4至10倍,則可以認(rèn)為該渲染任務(wù)采用C/C++代碼會性能更優(yōu),為復(fù)雜任務(wù)。這時(shí),可以由開發(fā)人員決定采用C/C++代碼來實(shí)現(xiàn)該渲染任務(wù),也可以由AS3自動選擇采用C/C++代碼來實(shí)現(xiàn)該渲染任務(wù),并向由C++代碼生成的高性能模塊發(fā)送包括待處理數(shù)據(jù)的第一數(shù)據(jù)流對象。
[0063]步驟102、高性能模塊根據(jù)所述渲染任務(wù)對所述待處理數(shù)據(jù)進(jìn)行快速處理得到待渲染數(shù)據(jù),并向所述主模塊回傳包括所述待渲染數(shù)據(jù)的第二數(shù)據(jù)流對象。
[0064]具體而言,高性能模塊接收到該第一數(shù)據(jù)流對象后,可以對該第一數(shù)據(jù)流對象中的待處理數(shù)據(jù)進(jìn)行快速處理。然后將處理結(jié)果作為待渲染數(shù)據(jù),通過第二數(shù)據(jù)流對象回傳給主模塊。
[0065]其中,第一數(shù)據(jù)流對象可以為同一個(gè)數(shù)據(jù)流對象,也可以為不同的數(shù)據(jù)流對象。具體可以分為以下方式:
[0066]方式一、第一數(shù)據(jù)流對象與第二數(shù)據(jù)流對象為同一個(gè)數(shù)據(jù)流對象,這種情況下,高性能模塊可以在第一數(shù)據(jù)流對象內(nèi)對待處理數(shù)據(jù)進(jìn)行快速處理并生成待渲染數(shù)據(jù),然后將包括所述待渲染數(shù)據(jù)的所述第一數(shù)據(jù)流對象作為所述第二數(shù)據(jù)流對象回傳給所述主模塊。在這種情況下,不用創(chuàng)建新對象,可以不用開辟新內(nèi)存,不會增加對內(nèi)存的占用。
[0067]方式二、第一數(shù)據(jù)流對象與所述第二數(shù)據(jù)流對象為不同的數(shù)據(jù)流對象,這種情況下,高性能模塊對待處理數(shù)據(jù)進(jìn)行快速處理并生成待渲染數(shù)據(jù)后,可以將所生成的待渲染數(shù)據(jù)寫入新創(chuàng)建的第二數(shù)據(jù)流對象,并將所述第二數(shù)據(jù)流對象回傳給所述主模塊。
[0068]步驟103、主模塊向渲染模塊發(fā)送所述第二數(shù)據(jù)流對象,由所述渲染模塊根據(jù)所述待渲染數(shù)據(jù)執(zhí)行所述渲染任務(wù)。
[0069]舉例而言,AS3模塊可以將包括待渲染數(shù)據(jù)的第二數(shù)據(jù)流對象發(fā)送給Stage3D,由Stage3D利用電腦的GPU來執(zhí)行具體的渲染操作。
[0070]本實(shí)施例的渲染方法,利用高性能模塊對待處理數(shù)據(jù)進(jìn)行快速處理并生成待渲染數(shù)據(jù),再通過主模塊將待渲染數(shù)據(jù)提供給渲染模塊進(jìn)行渲染,能夠快速處理渲染過程中的部分?jǐn)?shù)據(jù),并且不會增加應(yīng)用程序的內(nèi)存占用量,從而提高應(yīng)用程序的性能比如幀率提高,使得畫面顯示更流暢。對于復(fù)雜任務(wù)的畫面顯示效果提升更加明顯。
[0071]進(jìn)一步地,如果在同一個(gè)數(shù)據(jù)流對象內(nèi)進(jìn)行快速處理并生成待渲染數(shù)據(jù),可以不創(chuàng)建新數(shù)據(jù)流對象,可以不用開辟新內(nèi)存,從而不增加應(yīng)用程序的內(nèi)存占用量。
[0072]實(shí)施例2
[0073]圖2示出根據(jù)本發(fā)明另一實(shí)施例的渲染方法的流程圖。在本實(shí)施例中,主模塊為AS3,高性能模塊為采用C/C++代碼生成的C/C++模塊,渲染模塊為Stage3D,其中,AS3、C/C++模塊、Stage3D僅是對本發(fā)明渲染方法的實(shí)現(xiàn)過程進(jìn)行示例說明,具體實(shí)現(xiàn)時(shí)也可能采用其他渲染工具。該渲染方法具體可以包括以下步驟:
[0074]步驟201、采用C/C++工具編寫需要的各種渲染任務(wù)的程序代碼。
[0075]步驟202、利用編譯工具例如CrossBridge將C/C++代碼(快速處理代碼的示例)編譯成AS3能夠讀取的swc文件,供AS3調(diào)用。swc文件中包括能夠?qū)崿F(xiàn)某一清染任務(wù)的C/C++模塊(高性能模塊)及其函數(shù)接口 (接口模塊)。
[0076]其中,CrossBridge是Adobe FlasCC的開源版本,它提供了一個(gè)完整的C/C++開發(fā)環(huán)境,能夠把C/C++代碼編譯成FLASH程序,運(yùn)行于FLASH Runtime之上。CrossBridge也可以把C/C++代碼編譯成SWC文件供AS3調(diào)用。
[0077]步驟203、AS3調(diào)用由編譯而成的swc文件中提供的函數(shù)接口,將包括待處理數(shù)據(jù)的數(shù)據(jù)流對象傳給C/C++模塊進(jìn)行數(shù)據(jù)處理。
[0078]步驟204、C/C++模塊可以對該待處理數(shù)據(jù)進(jìn)行相應(yīng)的運(yùn)算和處理,得到待渲染數(shù)據(jù)。
[0079]步驟205、C/C++模塊處理完數(shù)據(jù)后,通過swc文件中的函數(shù)接口,將已經(jīng)寫入待渲染數(shù)據(jù)的數(shù)據(jù)流對象返回給AS3。
[0080]步驟206、AS3將C/C++模塊處理后的數(shù)據(jù)流對象上傳給Stage3D (渲染模塊)進(jìn)行渲染。
[0081]舉例而言,假設(shè)渲染任務(wù)是使用隨機(jī)顏色數(shù)據(jù)填充矩形,使矩形像素值改變,圖3為需要處理的原始圖,待處理數(shù)據(jù)可以為該黑色矩形的圖像數(shù)據(jù)(簡稱矩形圖像數(shù)據(jù)),通過數(shù)據(jù)流對象將矩形圖像數(shù)據(jù)發(fā)送給C/C++模塊,該C/C++模塊通過嵌套循環(huán)等算法計(jì)算出一系列像素?cái)?shù)據(jù)。C/C++模塊再將計(jì)算出來的像素?cái)?shù)據(jù)寫入矩形圖像數(shù)據(jù),例如:進(jìn)行鎖定矩形圖像數(shù)據(jù)、設(shè)置矩形圖像數(shù)據(jù)的像素值、解除矩形圖像數(shù)據(jù)鎖定等一系列操作。C/C++模塊再將寫入像素?cái)?shù)據(jù)后的矩形圖像數(shù)據(jù)作為待渲染數(shù)據(jù)(可以同樣通過數(shù)據(jù)流對象)發(fā)送給AS3,由AS3將待渲染數(shù)據(jù)上傳給Stage3D進(jìn)行硬件加速渲染,渲染效果如圖4所示。
[0082]下面比較本實(shí)施例與現(xiàn)有技術(shù)的應(yīng)用程序的運(yùn)行幀率。如圖5所示為采用AS3直接處理數(shù)據(jù)的應(yīng)用程序的運(yùn)行結(jié)果示意圖,如圖6所示為采用C/C++模塊處理數(shù)據(jù)的應(yīng)用程序的運(yùn)行結(jié)果示意圖,采用C/C++模塊的幀率可以達(dá)到35FPS(Frames per Second,每秒顯示幀數(shù)),比采用AS3直接處理的幀率8FPS快了 4倍多。
[0083]本實(shí)施例的渲染方法,利用C/C++模塊向AS3提供待渲染數(shù)據(jù),再由AS3將待渲染數(shù)據(jù)提供給FLASH的Stage3D進(jìn)行渲染的方案,能夠采用C/C++模塊處理部分?jǐn)?shù)據(jù),可以加快渲染中的數(shù)據(jù)處理速度,并且不會增加應(yīng)用程序的內(nèi)存占用量,從而提高應(yīng)用程序的性能比如幀率提高,使得畫面顯示更流暢。對于復(fù)雜任務(wù)的畫面顯示效果提升更加明顯。
[0084]進(jìn)一步地,如果C/C++模塊操作的是AS3中產(chǎn)生的同一個(gè)數(shù)據(jù)流對象,而不在C/C++模塊中創(chuàng)建新實(shí)例,則可以不用開辟新內(nèi)存,從而不增加應(yīng)用程序的內(nèi)存占用量。
[0085]實(shí)施例3
[0086]圖7示出根據(jù)本發(fā)明一實(shí)施例的渲染裝置的結(jié)構(gòu)框圖。如圖7所示,該渲染裝置包括: