本發(fā)明涉及三維顯示技術(shù)領(lǐng)域,具體而言,涉及一種渲染對(duì)象的過(guò)濾方法和一種渲染對(duì)象的過(guò)濾裝置。
背景技術(shù):
更改渲染對(duì)象的可見(jiàn)性是三維顯示引擎最基本的功能。比如在三維BIM(Building Information Modeling,建筑信息模型)應(yīng)用中,在模型中包含大量的渲染對(duì)象,渲染對(duì)象之間存在互相遮擋的情況。為了便于查看模型,經(jīng)常需要按照樓層、專業(yè)、渲染對(duì)象類別、分類編碼等過(guò)濾顯示渲染對(duì)象。
在相關(guān)技術(shù)中,根據(jù)過(guò)濾條件查找出對(duì)應(yīng)的渲染對(duì)象,渲染對(duì)象有bool類型的表示可見(jiàn)性的屬性,如Visible,當(dāng)Visible為true代表渲染對(duì)象可見(jiàn),當(dāng)Visible為false則渲染對(duì)象不可見(jiàn)。當(dāng)切換過(guò)濾條件的時(shí)候,需要遍歷所有的渲染對(duì)象,可見(jiàn)的設(shè)置為true,不可見(jiàn)的設(shè)置為false。在顯示引擎生成渲染隊(duì)列的時(shí)候根據(jù)對(duì)象的Visible屬性判斷對(duì)象是否應(yīng)該加入渲染列表中。在有限個(gè)數(shù)的過(guò)濾條件下,如只按樓層和專業(yè)過(guò)濾渲染對(duì)象,有的采用按照樓層分組顯示渲染對(duì)象,在同一樓層下的渲染對(duì)象再按照專業(yè)分組,從而對(duì)渲染對(duì)象進(jìn)行過(guò)濾。
通過(guò)查找所有的渲染對(duì)象設(shè)置其可見(jiàn)性屬性,有如下的缺點(diǎn):
1、首先需要保證所有的渲染對(duì)象都需要加載在內(nèi)存中。若不是全加載,則需要保存過(guò)濾條件,后期加載的渲染對(duì)象根據(jù)過(guò)濾條件設(shè)置渲染對(duì)象的可見(jiàn)性。在多線程的環(huán)境下,則需要通過(guò)同步機(jī)制來(lái)保證過(guò)濾條件的有效性。
2、需要遍歷所有的渲染對(duì)象,判斷每一個(gè)渲染對(duì)象是否應(yīng)該設(shè)置為可見(jiàn)或者不可見(jiàn)。在計(jì)算性能比較低的環(huán)境,如Web瀏覽器中,這樣可能會(huì)引起Web瀏覽器停止響應(yīng)。
3、按過(guò)濾條件來(lái)組織場(chǎng)景的結(jié)構(gòu)增加了場(chǎng)景和過(guò)濾條件直接的耦合,當(dāng)增加新的過(guò)濾條件后,需要重新組織場(chǎng)景。另外當(dāng)過(guò)濾條件多了后,增加了場(chǎng)景樹的深度,影響遍歷場(chǎng)景的性能,可能達(dá)不到快速過(guò)濾顯示渲染對(duì)象的效果。
因此,如何快速地過(guò)濾渲染對(duì)象成為亟待解決的技術(shù)問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明正是基于上述問(wèn)題,提出了一種新的技術(shù)方案,可以快速地過(guò)濾出渲染對(duì)象。
有鑒于此,本發(fā)明的第一方面提出了一種渲染對(duì)象的過(guò)濾方法,包括:為多個(gè)渲染對(duì)象中的每個(gè)渲染對(duì)象定義擴(kuò)展屬性;根據(jù)對(duì)所述多個(gè)渲染對(duì)象進(jìn)行過(guò)濾的條件和所述每個(gè)渲染對(duì)象的所述擴(kuò)展屬性,生成至少一個(gè)過(guò)濾器;在對(duì)所述多個(gè)渲染對(duì)象中的任一渲染對(duì)象進(jìn)行過(guò)濾時(shí),根據(jù)所述至少一個(gè)過(guò)濾器和所述任一渲染對(duì)象的所述擴(kuò)展屬性,確定是否將所述任一渲染對(duì)象添加到渲染隊(duì)列中。
在該技術(shù)方案中,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,根據(jù)過(guò)濾條件和擴(kuò)展屬性生成的過(guò)濾器來(lái)實(shí)現(xiàn)渲染對(duì)象的過(guò)濾,避免了遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而可以快速地過(guò)濾出渲染對(duì)象,而且生成過(guò)濾器的性能比遍歷所有的渲染對(duì)象的性能要高。另外,上述方案適用于在內(nèi)存資源受限的環(huán)境下模型的部分加載和動(dòng)態(tài)管理,如Web瀏覽器和移動(dòng)終端,由于可見(jiàn)性不是保存在渲染對(duì)象上,不需要額外的狀態(tài)記錄模型的可見(jiàn)性。最后,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,方便用戶增加自定義屬性,并把自定義屬性與過(guò)濾條件結(jié)合,因此具有很高的可擴(kuò)展性。
在上述技術(shù)方案中,優(yōu)選地,所述擴(kuò)展屬性包括屬性名字和屬性值。
在上述任一技術(shù)方案中,優(yōu)選地,所述根據(jù)所述至少一個(gè)過(guò)濾器和所述任一渲染對(duì)象的所述擴(kuò)展屬性,確定是否將所述任一渲染對(duì)象添加到渲染隊(duì)列中的步驟,具體包括:判斷所述任一渲染對(duì)象的屬性名字和屬性值是否滿足預(yù)設(shè)條件,其中,所述預(yù)設(shè)條件為:所述任一渲染對(duì)象的屬性名字在所述至少一個(gè)過(guò)濾器中的任一過(guò)濾器中,所述任一渲染對(duì)象的屬性值在所述任一過(guò)濾器的值集合中;若所述任一渲染對(duì)象的屬性名字和屬性值均滿足所述預(yù)設(shè)條件,則將所述任一渲染對(duì)象過(guò)濾掉;若所述任一渲染對(duì)象的屬性名字或者屬性值不滿足所述預(yù)設(shè)條件,則將所述任一渲染對(duì)象添加到所述渲染隊(duì)列中。
在該技術(shù)方案中,在將任一渲染對(duì)象添加到渲染隊(duì)列之前,比較任一渲染對(duì)象的屬性名字是否存在至少一個(gè)過(guò)濾器中,若任一渲染對(duì)象的屬性名字在任一過(guò)濾器中,比較任一渲染對(duì)象的屬性值是否在任一過(guò)濾器的值集合中,若存在,則任一渲染對(duì)象不添加到渲染隊(duì)列中,即不對(duì)任一渲染對(duì)象進(jìn)行顯示。通過(guò)上述技術(shù)方案,避免遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而快速地過(guò)濾出渲染對(duì)象。
在上述任一技術(shù)方案中,優(yōu)選地,還包括:使用哈希表存儲(chǔ)所述擴(kuò)展屬性的屬性名字和屬性值。
在該技術(shù)方案中,使用哈希表存儲(chǔ)屬性名字和屬性值,查找的時(shí)間復(fù)雜度為0(1),從而有效地提高了擴(kuò)展屬性的查找速度。
在上述任一技術(shù)方案中,優(yōu)選地,所述任一渲染對(duì)象為所述多個(gè)渲染對(duì)象中的未被視錐剔除的渲染對(duì)象。
在該技術(shù)方案中,在渲染對(duì)象進(jìn)行視錐剔除之后,對(duì)未被視錐剔除的渲染對(duì)象進(jìn)行過(guò)濾,可見(jiàn),參與過(guò)濾的渲染對(duì)象并不是所有的渲染對(duì)象,從而有效地提高了渲染對(duì)象的過(guò)濾速度。尤其在查看模型局部的時(shí)候,會(huì)大大的提高過(guò)濾速度。
本發(fā)明的第二方面提出了一種渲染對(duì)象的過(guò)濾裝置,包括:定義單元,用于為多個(gè)渲染對(duì)象中的每個(gè)渲染對(duì)象定義擴(kuò)展屬性;生成單元,用于根據(jù)對(duì)所述多個(gè)渲染對(duì)象進(jìn)行過(guò)濾的條件和所述每個(gè)渲染對(duì)象的所述擴(kuò)展屬性,生成至少一個(gè)過(guò)濾器;確定單元,用于在對(duì)所述多個(gè)渲染對(duì)象中的任一渲染對(duì)象進(jìn)行過(guò)濾時(shí),根據(jù)所述至少一個(gè)過(guò)濾器和所述任一渲染對(duì)象的所述擴(kuò)展屬性,確定是否將所述任一渲染對(duì)象添加到渲染隊(duì)列中。
在該技術(shù)方案中,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,根據(jù)過(guò)濾條件和擴(kuò)展屬性生成的過(guò)濾器來(lái)實(shí)現(xiàn)渲染對(duì)象的過(guò)濾,避免了遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而可以快速地過(guò)濾出渲染對(duì)象,而且生成過(guò)濾器的性能比遍歷所有的渲染對(duì)象的性能要高。另外,上述方案適用于在內(nèi)存資源受限的環(huán)境下模型的部分加載和動(dòng)態(tài)管理,如Web瀏覽器和移動(dòng)終端,由于可見(jiàn)性不是保存在渲染對(duì)象上,不需要額外的狀態(tài)記錄模型的可見(jiàn)性。最后,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,方便用戶增加自定義屬性,并把自定義屬性與過(guò)濾條件結(jié)合,因此具有很高的可擴(kuò)展性。
在上述技術(shù)方案中,優(yōu)選地,所述擴(kuò)展屬性包括屬性名字和屬性值。
在上述任一技術(shù)方案中,優(yōu)選地,所述確定單元包括:判斷子單元,用于判斷所述任一渲染對(duì)象的屬性名字和屬性值是否滿足預(yù)設(shè)條件,其中,所述預(yù)設(shè)條件為:所述任一渲染對(duì)象的屬性名字在所述至少一個(gè)過(guò)濾器中的任一過(guò)濾器中,所述任一渲染對(duì)象的屬性值在所述任一過(guò)濾器的值集合中;過(guò)濾子單元,用于在所述判斷子單元判定所述任一渲染對(duì)象的屬性名字和屬性值均滿足所述預(yù)設(shè)條件的情況下,將所述任一渲染對(duì)象過(guò)濾掉;添加子單元,用于在所述判斷子單元判定所述任一渲染對(duì)象的屬性名字或者屬性值不滿足所述預(yù)設(shè)條件的情況下,將所述任一渲染對(duì)象添加到所述渲染隊(duì)列中。
在該技術(shù)方案中,在將任一渲染對(duì)象添加到渲染隊(duì)列之前,比較任一渲染對(duì)象的屬性名字是否存在至少一個(gè)過(guò)濾器中,若任一渲染對(duì)象的屬性名字在任一過(guò)濾器中,比較任一渲染對(duì)象的屬性值是否在任一過(guò)濾器的值集合中,若存在,則任一渲染對(duì)象不添加到渲染隊(duì)列中,即不對(duì)任一渲染對(duì)象進(jìn)行顯示。通過(guò)上述技術(shù)方案,避免遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而快速地過(guò)濾出渲染對(duì)象。
在上述任一技術(shù)方案中,優(yōu)選地,還包括:存儲(chǔ)單元,用于使用哈希表存儲(chǔ)所述擴(kuò)展屬性的屬性名字和屬性值。
在該技術(shù)方案中,使用哈希表存儲(chǔ)屬性名字和屬性值,查找的時(shí)間復(fù)雜度為0(1),從而有效地提高了擴(kuò)展屬性的查找速度。
在上述任一技術(shù)方案中,優(yōu)選地,所述任一渲染對(duì)象為所述多個(gè)渲染對(duì)象中的未被視錐剔除的渲染對(duì)象。
在該技術(shù)方案中,在渲染對(duì)象進(jìn)行視錐剔除之后,對(duì)未被視錐剔除的渲染對(duì)象進(jìn)行過(guò)濾,可見(jiàn),參與過(guò)濾的渲染對(duì)象并不是所有的渲染對(duì)象,從而有效地提高了渲染對(duì)象的過(guò)濾速度。尤其在查看模型局部的時(shí)候,會(huì)大大的提高過(guò)濾速度。
通過(guò)本發(fā)明的技術(shù)方案,可以快速地過(guò)濾出渲染對(duì)象。
附圖說(shuō)明
圖1示出了根據(jù)本發(fā)明的實(shí)施例的渲染對(duì)象的過(guò)濾方法的流程示意圖;
圖2示出了根據(jù)本發(fā)明的實(shí)施例的渲染對(duì)象的過(guò)濾裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了可以更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)的實(shí)施例及實(shí)施例中的特征可以相互組合。
在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開的具體實(shí)施例的限制。
圖1示出了根據(jù)本發(fā)明的實(shí)施例的渲染對(duì)象的過(guò)濾方法的流程示意圖。
如圖1所示,根據(jù)本發(fā)明的實(shí)施例的渲染對(duì)象的過(guò)濾方法,包括:
步驟102,為多個(gè)渲染對(duì)象中的每個(gè)渲染對(duì)象定義擴(kuò)展屬性。
擴(kuò)展屬性:添加在渲染對(duì)象上的自定義屬性,一個(gè)渲染對(duì)象上可以添加若干條不重名的擴(kuò)展屬性。
步驟104,根據(jù)對(duì)所述多個(gè)渲染對(duì)象進(jìn)行過(guò)濾的條件和所述每個(gè)渲染對(duì)象的所述擴(kuò)展屬性,生成至少一個(gè)過(guò)濾器。
對(duì)多個(gè)渲染對(duì)象進(jìn)行過(guò)濾的條件是用戶定義的對(duì)多個(gè)渲染對(duì)象進(jìn)行過(guò)濾的條件。
步驟106,在對(duì)所述多個(gè)渲染對(duì)象中的任一渲染對(duì)象進(jìn)行過(guò)濾時(shí),根據(jù)所述至少一個(gè)過(guò)濾器和所述任一渲染對(duì)象的所述擴(kuò)展屬性,確定是否將所述任一渲染對(duì)象添加到渲染隊(duì)列中。
渲染隊(duì)列:顯示引擎中需要渲染對(duì)象的列表,只有在渲染隊(duì)列中的渲染對(duì)象才可見(jiàn)和才能夠被繪制。
在該技術(shù)方案中,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,根據(jù)過(guò)濾條件和擴(kuò)展屬性生成的過(guò)濾器來(lái)實(shí)現(xiàn)渲染對(duì)象的過(guò)濾,避免了遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而可以快速地過(guò)濾出渲染對(duì)象,而且生成過(guò)濾器的性能比遍歷所有的渲染對(duì)象的性能要高。另外,上述方案適用于在內(nèi)存資源受限的環(huán)境下模型的部分加載和動(dòng)態(tài)管理,如Web瀏覽器和移動(dòng)終端,由于可見(jiàn)性不是保存在渲染對(duì)象上,不需要額外的狀態(tài)記錄模型的可見(jiàn)性。最后,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,方便用戶增加自定義屬性,并把自定義屬性與過(guò)濾條件結(jié)合,因此具有很高的可擴(kuò)展性。
在上述技術(shù)方案中,優(yōu)選地,所述擴(kuò)展屬性包括屬性名字和屬性值。
在該技術(shù)方案中,擴(kuò)展屬性的屬性名字不重復(fù),屬性值使用字符串類型,每個(gè)渲染對(duì)象可以有一個(gè)或多個(gè)擴(kuò)展屬性,擴(kuò)展屬性的個(gè)數(shù)可以根據(jù)業(yè)務(wù)需求動(dòng)態(tài)增加,可以在模型輕量化的過(guò)程中為渲染對(duì)象設(shè)置擴(kuò)展屬性,序列化到場(chǎng)景文件中。
例如,使用JSON格式描述的渲染對(duì)象Id為10000的擴(kuò)展屬性。該渲染對(duì)象有LevelId、CategoryId和FileId三個(gè)擴(kuò)展屬性:
過(guò)濾條件由屬性名字和屬性值的集合組成。比如同時(shí)過(guò)濾1樓和2樓的過(guò)濾器可以用JavaScript進(jìn)行如下的定義:
var levelFilter={LevelId:[“L1”,“L2”]};
使用屬性名字作為過(guò)濾器的屬性名字,使用數(shù)組或者集合支持屬性名字相同但屬性值不同的渲染對(duì)象的過(guò)濾。
多個(gè)過(guò)濾器組成過(guò)濾器的集合,可以用一個(gè)對(duì)象管理:
在上述例子中不同的屬性值使用數(shù)組來(lái)保存,當(dāng)然,也可以用哈希表來(lái)保持不同的屬性值。
在上述任一技術(shù)方案中,優(yōu)選地,步驟106具體包括:判斷所述任一渲染對(duì)象的屬性名字和屬性值是否滿足預(yù)設(shè)條件,其中,所述預(yù)設(shè)條件為:所述任一渲染對(duì)象的屬性名字在所述至少一個(gè)過(guò)濾器中的任一過(guò)濾器中,所述任一渲染對(duì)象的屬性值在所述任一過(guò)濾器的值集合中;若所述任一渲染對(duì)象的屬性名字和屬性值均滿足所述預(yù)設(shè)條件,則將所述任一渲染對(duì)象過(guò)濾掉;若所述任一渲染對(duì)象的屬性名字或者屬性值不滿足所述預(yù)設(shè)條件,則將所述任一渲染對(duì)象添加到所述渲染隊(duì)列中。
在該技術(shù)方案中,在將任一渲染對(duì)象添加到渲染隊(duì)列之前,比較任一渲染對(duì)象的屬性名字是否存在至少一個(gè)過(guò)濾器中,若任一渲染對(duì)象的屬性名字在任一過(guò)濾器中,比較任一渲染對(duì)象的屬性值是否在任一過(guò)濾器的值集合中,若存在,則任一渲染對(duì)象不添加到渲染隊(duì)列中,即不對(duì)任一渲染對(duì)象進(jìn)行顯示。通過(guò)上述技術(shù)方案,避免遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而快速地過(guò)濾出渲染對(duì)象。
在上述任一技術(shù)方案中,優(yōu)選地,還包括:使用哈希表存儲(chǔ)所述擴(kuò)展屬性的屬性名字和屬性值。
在該技術(shù)方案中,使用哈希表存儲(chǔ)屬性名字和屬性值,查找的時(shí)間復(fù)雜度為0(1),從而有效地提高了擴(kuò)展屬性的查找速度。
在上述任一技術(shù)方案中,優(yōu)選地,所述任一渲染對(duì)象為所述多個(gè)渲染對(duì)象中的未被視錐剔除的渲染對(duì)象。
在該技術(shù)方案中,在渲染對(duì)象進(jìn)行視錐剔除之后,對(duì)未被視錐剔除的渲染對(duì)象進(jìn)行過(guò)濾,可見(jiàn),參與過(guò)濾的渲染對(duì)象并不是所有的渲染對(duì)象,從而有效地提高了渲染對(duì)象的過(guò)濾速度。尤其在查看模型局部的時(shí)候,會(huì)大大的提高過(guò)濾速度。
下面對(duì)視錐剔除進(jìn)行解釋。在相機(jī)界面中有近裁界面、遠(yuǎn)裁界面以及上、下、左、右四個(gè)界面,由該六個(gè)界面組成了視錐體,將視錐體內(nèi)不可見(jiàn)的渲染對(duì)象剔除掉,視錐體內(nèi)可見(jiàn)的渲染對(duì)象保留,保留的渲染對(duì)象即為未被視錐剔除的渲染對(duì)象。
圖2示出了根據(jù)本發(fā)明的實(shí)施例的渲染對(duì)象的過(guò)濾裝置的結(jié)構(gòu)示意圖。
如圖2所示,根據(jù)本發(fā)明的實(shí)施例的渲染對(duì)象的過(guò)濾裝置200,包括:定義單元202、生成單元204和確定單元206。
定義單元202,用于為多個(gè)渲染對(duì)象中的每個(gè)渲染對(duì)象定義擴(kuò)展屬性;生成單元204,用于根據(jù)對(duì)所述多個(gè)渲染對(duì)象進(jìn)行過(guò)濾的條件和所述每個(gè)渲染對(duì)象的所述擴(kuò)展屬性,生成至少一個(gè)過(guò)濾器;確定單元206,用于在對(duì)所述多個(gè)渲染對(duì)象中的任一渲染對(duì)象進(jìn)行過(guò)濾時(shí),根據(jù)所述至少一個(gè)過(guò)濾器和所述任一渲染對(duì)象的所述擴(kuò)展屬性,確定是否將所述任一渲染對(duì)象添加到渲染隊(duì)列中。
在該技術(shù)方案中,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,根據(jù)過(guò)濾條件和擴(kuò)展屬性生成的過(guò)濾器來(lái)實(shí)現(xiàn)渲染對(duì)象的過(guò)濾,避免了遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而可以快速地過(guò)濾出渲染對(duì)象,而且生成過(guò)濾器的性能比遍歷所有的渲染對(duì)象的性能要高。另外,上述方案適用于在內(nèi)存資源受限的環(huán)境下模型的部分加載和動(dòng)態(tài)管理,如Web瀏覽器和移動(dòng)終端,由于可見(jiàn)性不是保存在渲染對(duì)象上,不需要額外的狀態(tài)記錄模型的可見(jiàn)性。最后,通過(guò)定義渲染對(duì)象的擴(kuò)展屬性,方便用戶增加自定義屬性,并把自定義屬性與過(guò)濾條件結(jié)合,因此具有很高的可擴(kuò)展性。
在上述技術(shù)方案中,優(yōu)選地,所述擴(kuò)展屬性包括屬性名字和屬性值。
在該技術(shù)方案中,擴(kuò)展屬性的屬性名字不重復(fù),屬性值使用字符串類型,每個(gè)渲染對(duì)象可以有一個(gè)或多個(gè)擴(kuò)展屬性,擴(kuò)展屬性的個(gè)數(shù)可以根據(jù)業(yè)務(wù)需求動(dòng)態(tài)增加,可以在模型輕量化的過(guò)程中為渲染對(duì)象設(shè)置擴(kuò)展屬性,序列化到場(chǎng)景文件中。
在上述任一技術(shù)方案中,優(yōu)選地,所述確定單元206包括:判斷子單元2062,用于判斷所述任一渲染對(duì)象的屬性名字和屬性值是否滿足預(yù)設(shè)條件,其中,所述預(yù)設(shè)條件為:所述任一渲染對(duì)象的屬性名字在所述至少一個(gè)過(guò)濾器中的任一過(guò)濾器中,所述任一渲染對(duì)象的屬性值在所述任一過(guò)濾器的值集合中;過(guò)濾子單元2064,用于在所述判斷子單元2062判定所述任一渲染對(duì)象的屬性名字和屬性值均滿足所述預(yù)設(shè)條件的情況下,將所述任一渲染對(duì)象過(guò)濾掉;添加子單元2066,用于在所述判斷子單元2062判定所述任一渲染對(duì)象的屬性名字或者屬性值不滿足所述預(yù)設(shè)條件的情況下,將所述任一渲染對(duì)象添加到所述渲染隊(duì)列中。
在該技術(shù)方案中,在將任一渲染對(duì)象添加到渲染隊(duì)列之前,比較任一渲染對(duì)象的屬性名字是否存在至少一個(gè)過(guò)濾器中,若任一渲染對(duì)象的屬性名字在任一過(guò)濾器中,比較任一渲染對(duì)象的屬性值是否在任一過(guò)濾器的值集合中,若存在,則任一渲染對(duì)象不添加到渲染隊(duì)列中,即不對(duì)任一渲染對(duì)象進(jìn)行顯示。通過(guò)上述技術(shù)方案,避免遍歷所有的渲染對(duì)象來(lái)修改渲染對(duì)象的可見(jiàn)性,從而快速地過(guò)濾出渲染對(duì)象。
在上述任一技術(shù)方案中,優(yōu)選地,還包括:存儲(chǔ)單元208,用于使用哈希表存儲(chǔ)所述擴(kuò)展屬性的屬性名字和屬性值。
在該技術(shù)方案中,使用哈希表存儲(chǔ)屬性名字和屬性值,查找的時(shí)間復(fù)雜度為0(1),從而有效地提高了擴(kuò)展屬性的查找速度。
在上述任一技術(shù)方案中,優(yōu)選地,所述任一渲染對(duì)象為所述多個(gè)渲染對(duì)象中的未被視錐剔除的渲染對(duì)象。
在該技術(shù)方案中,在渲染對(duì)象進(jìn)行視錐剔除之后,對(duì)未被視錐剔除的渲染對(duì)象進(jìn)行過(guò)濾,可見(jiàn),參與過(guò)濾的渲染對(duì)象并不是所有的渲染對(duì)象,從而有效地提高了渲染對(duì)象的過(guò)濾速度。尤其在查看模型局部的時(shí)候,會(huì)大大的提高過(guò)濾速度。
以上結(jié)合附圖詳細(xì)說(shuō)明了本發(fā)明的技術(shù)方案,首先不需要遍歷渲染對(duì)象修改渲染對(duì)象的可見(jiàn)性,只需要根據(jù)過(guò)濾條件和對(duì)應(yīng)的擴(kuò)展屬性生成過(guò)濾器,因此生成過(guò)濾器的性能比遍歷所有的渲染對(duì)象要高。其次,本方案適用于在內(nèi)存資源受限的環(huán)境下模型部分加載和動(dòng)態(tài)管理,而且可見(jiàn)性不是保存在渲染對(duì)象上,因此不需要額外的狀態(tài)記錄模型的可見(jiàn)性。最后,通過(guò)渲染對(duì)象的擴(kuò)展屬性,方便用戶增加自定義的屬性,并把自定義的屬性與過(guò)濾條件結(jié)合,因此具有很高的可擴(kuò)展性。
在本發(fā)明中,術(shù)語(yǔ)“第一”、“第二”僅用于描述的目的,而不能理解為指示或暗示相對(duì)重要性;術(shù)語(yǔ)“多個(gè)”表示兩個(gè)或兩個(gè)以上。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以根據(jù)具體情況理解上述術(shù)語(yǔ)在本發(fā)明中的具體含義。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。