一種三維場景渲染方法
【專利摘要】本發(fā)明實施例公開了一種三維場景渲染方法,實現(xiàn)了在渲染三維場景時減少材質(zhì)應(yīng)用的次數(shù),同時,相應(yīng)地減少了程序和顯卡的交互次數(shù),減少了狀態(tài)的變化數(shù)量,從而提高三維場景的渲染效率。本發(fā)明實施例方法包括:S1:遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄;S2:根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制;S3:對所有類別的材質(zhì)的三角面進行一一渲染。
【專利說明】一種三維場景渲染方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機顯示【技術(shù)領(lǐng)域】,尤其涉及一種三維場景渲染方法。
【背景技術(shù)】
[0002] 三維是指在平面二維系中又加入了一個方向向量構(gòu)成的空間系,隨著科技的發(fā) 展,基于電腦/互聯(lián)網(wǎng)的數(shù)字化的三維立體3D技術(shù)日趨成熟。在經(jīng)過多年的快速發(fā)展與廣 泛應(yīng)用,當(dāng)前3D技術(shù)得到了顯著的成熟與普及,一個以3D取代2D、"立體"取代"平面"、"虛 擬"模擬"現(xiàn)實"的3D浪潮正在各個領(lǐng)域迅猛掀起。3D應(yīng)用程序通過加載和渲染較龐大的 數(shù)據(jù),達到顯示的場景更貼近現(xiàn)實的效果。這些數(shù)據(jù)主要包括模型、地形、紋理、光照等等。 在渲染場景時,通常以物體為單位,先使用物體的頂點建立物體的輪廓,這些輪廓一般表現(xiàn) 為3角網(wǎng)(三角面集合),之后在三角網(wǎng)的每一個三角面中應(yīng)用材質(zhì)來顯示一個物體,逐個 物體渲染直至把整個場景中的物體都顯示完,通過這樣構(gòu)造出仿真的效果。
[0003] 這種傳統(tǒng)的以渲染物體為單位方式,比較符合較常規(guī)的仿真思維。比如要顯示 一個房間,一般的方法是先把房間的墻和天花板顯示出來,之后再把房間中的物體一件一 件的顯示。類似素描,把物體逐個繪制出來。傳統(tǒng)的方法給每個三角面都應(yīng)用材質(zhì)的過 程是非常耗時的,因為計算機需要分別把每個面的的頂點數(shù)據(jù)以及材質(zhì)數(shù)據(jù)發(fā)送給計算 機的顯卡,并為每個面處理紋理的融合和光照,每一次的應(yīng)用材質(zhì)都需要渲染引擎,例如 OpenGL(Open Graphics Library)或者DX(DirectX),進行一次狀態(tài)的改變,這些操作耗 CPU(中央處理器,Central Processing Unit)和 GPU(圖形處理器,Graphic Processing Unit)資源,雖然在小場景應(yīng)用中,需要渲染的物體數(shù)量不多,因此程序的顯示速度并不低。 但在大場景中,渲染物體數(shù)量較多,而每個物體可能包含成千上萬,甚至更多數(shù)量的三角 面,意味著需要大數(shù)據(jù)量的改變渲染狀態(tài),因此采用傳統(tǒng)的每個物體逐個渲染的是比較耗 費CPU和GPU的處理資源,導(dǎo)致處理時間是非常耗費的。
[0004] 基于上述提及的渲染物體多數(shù)據(jù)量時,耗費CPU和GPU的處理資源,導(dǎo)致處理時間 是非常耗費的技術(shù)問題,本發(fā)明提出了減少材質(zhì)應(yīng)用的次數(shù),則能減少程序和顯卡的交互 次數(shù),減少了狀態(tài)的變化數(shù)量,從而提高三維場景的渲染效率。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實施例提供了一種三維場景渲染方法,實現(xiàn)了在渲染三維場景時減少材質(zhì) 應(yīng)用的次數(shù),同時,相應(yīng)地減少了程序和顯卡的交互次數(shù),減少了狀態(tài)的變化數(shù)量,從而提 高三維場景的渲染效率。
[0006] 本發(fā)明實施例提供了一種三維場景渲染方法,步驟包括:
[0007] S1 :遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄;
[0008] S2 :根據(jù)所述記錄對與所述材質(zhì)相對應(yīng)的所有三角面進行繪制;
[0009] S3 :重復(fù)步驟S1對所有類別的材質(zhì)的三角面進行一一渲染。
[0010] 優(yōu)選地,
[0011] 所述步驟S1之前還包括:
[0012] 創(chuàng)建用于存儲所述材質(zhì)和與之相對應(yīng)的所述記錄的所述分類容器,所述記錄包含 有物體信息和三角面信息。
[0013] 優(yōu)選地,
[0014] 所述步驟S1之前還包括:
[0015] 按照遞增遍歷的方式將所述三維場景的所有物體一一遍歷,并一一遍歷每個所述 物體對應(yīng)的三角面;
[0016] 對所述所有物體的所述三角面以所述材質(zhì)進行分類。
[0017] 優(yōu)選地,
[0018] 按照遞增遍歷的方式將所述三維場景的所有物體一一遍歷,及每個所述物體對應(yīng) 的三角面具體包括:
[0019] 按照遞增遍歷的方式將所述三維場景的所有物體一一遍歷,并獲取與每個所述物 體相對應(yīng)的模型數(shù)據(jù);
[0020] 遍歷每個所述物體對應(yīng)的所述三角面,并獲取與所述三角面相對應(yīng)的所述材質(zhì)。
[0021] 優(yōu)選地,
[0022] 對所述所有物體的所述三角面以材質(zhì)進行分類具體包括:
[0023] 檢索所述分類容器中是否存在所述材質(zhì)和與之相對應(yīng)的所述記錄,若是,則觸發(fā) 進階判斷模式,若否,則添加所述材質(zhì)和與之相對應(yīng)的所述記錄。
[0024] 優(yōu)選地,
[0025] 所述進階判斷模式具體包括:
[0026] 判斷所述記錄中是否存在有與所述物體相對應(yīng)的物體信息,若是,則在所述記錄 中添加與所述材質(zhì)相對應(yīng)的三角面信息,若否,則基于所述材質(zhì)創(chuàng)建與之相對應(yīng)的所述記 錄。
[0027] 優(yōu)選地,
[0028] 所述步驟S2具體包括:
[0029] 通過所述記錄獲取相應(yīng)的模型數(shù)據(jù);
[0030] 根據(jù)所述模型數(shù)據(jù)對與所述材質(zhì)相對應(yīng)的所有三角面進行繪制,并應(yīng)用所述材 質(zhì)。
[0031] 優(yōu)選地,
[0032] 所述物體信息為物體游標(biāo)編號;
[0033] 所述三角面信息為三角面游標(biāo)編號。
[0034] 優(yōu)選地,
[0035] 所述模型數(shù)據(jù)包括三角面的頂點數(shù)據(jù)和材質(zhì)數(shù)據(jù)。
[0036] 優(yōu)選地,
[0037] 所述材質(zhì)為材質(zhì)編號信息。
[0038] 從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:
[0039] 本發(fā)明實施例提供了一種三維場景渲染方法,方法包括:S1 :遍歷分類容器,并從 中提取與三維場景的材質(zhì)相對應(yīng)的記錄;S2 :根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行 繪制;S3 :對所有類別的材質(zhì)的三角面進行一一渲染。本發(fā)明實施例中,通過先提取與材質(zhì) 相對應(yīng)的記錄,并根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制,最后就不同的材質(zhì)的 所有三角面一一進行繪制,實現(xiàn)了在渲染三維場景時減少材質(zhì)應(yīng)用的次數(shù),同時,相應(yīng)地減 少了程序和顯卡的交互次數(shù),減少了狀態(tài)的變化數(shù)量,從而提高三維場景的渲染效率。
【專利附圖】
【附圖說明】
[0040] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其它的附圖。
[0041] 圖1為本發(fā)明實施例提供的一種三維場景渲染方法的一個實施例的流程示意圖;
[0042] 圖2為本發(fā)明實施例提供的一種三維場景渲染方法的另一個實施例的流程示意 圖;
[0043] 圖3為本發(fā)明實施例提供的一種三維場景渲染方法的另一個實施例的流程示意 圖;
[0044] 圖4為本發(fā)明實施例提供的一種三維場景渲染方法的另一個實施例的流程示意 圖。
【具體實施方式】
[0045] 本發(fā)明實施例提供了一種三維場景渲染方法,實現(xiàn)了在渲染三維場景時減少材質(zhì) 應(yīng)用的次數(shù),同時,相應(yīng)地減少了程序和顯卡的交互次數(shù),減少了狀態(tài)的變化數(shù)量,從而提 高三維場景的渲染效率。
[0046] 為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明 實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,下面所描述 的實施例僅僅是本發(fā)明一部分實施例,而非全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域 普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護 的范圍。
[0047] 請參閱圖1,本發(fā)明實施例提供的一種三維場景渲染方法的一個實施例包括:
[0048] S1 :遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄;
[0049] 本發(fā)明實施例中,當(dāng)需要對一個三維場景進行渲染并顯示的時候,首先需要遍歷 分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄。
[0050] 需要說明的是,前述的相對應(yīng)的記錄可以是與三維場景的某一材質(zhì)所有相關(guān)聯(lián)的 記錄,該記錄包含有具備某一材質(zhì)的所有物體的物體信息和在該物體中應(yīng)用前述的材質(zhì)的 所有三角面信息。
[0051] 可以理解的是,前述的分類容器包含有該三維場景所有的材質(zhì),物體和三角面的 相關(guān)信息或數(shù)據(jù)內(nèi)容。
[0052] S2 :根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制;
[0053] 當(dāng)從分類容器中提取與三維場景的材質(zhì)相對應(yīng)的記錄之后,需要根據(jù)記錄對與材 質(zhì)相對應(yīng)的所有三角面進行繪制,需要說明的是,根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面 進行繪制將在后續(xù)實施例中進行詳細的描述,此處便不再贅述。
[0054] S3 :重復(fù)步驟S1對所有類別的材質(zhì)的三角面進行一一渲染。
[0055] 本實施例中,當(dāng)根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制之后,需要重復(fù) 步驟S1對所有類別的剩下的材質(zhì)的三角面進行一一渲染,最終僅依靠材質(zhì)進行所有材質(zhì) 的一次性渲染。
[0056] 本發(fā)明實施例中,通過先提取與材質(zhì)相對應(yīng)的記錄,并根據(jù)記錄對與材質(zhì)相對應(yīng) 的所有三角面進行繪制,最后就不同的材質(zhì)的所有三角面一一進行繪制,實現(xiàn)了在渲染三 維場景時減少材質(zhì)應(yīng)用的次數(shù),同時,相應(yīng)地減少了程序和顯卡的交互次數(shù),減少了狀態(tài)的 變化數(shù)量,從而提高三維場景的渲染效率。
[0057] 上面是對三維場景渲染方法的過程進行詳細的描述,下面將對遍歷分類容器之前 的創(chuàng)建分類容器的過程進行詳細的描述,請參閱圖2,本發(fā)明實施例提供的一種三維場景渲 染方法的另一個實施例包括:
[0058] 201、創(chuàng)建用于存儲材質(zhì)和與之相對應(yīng)的記錄的分類容器;
[0059] 本發(fā)明實施例中,當(dāng)需要對一個三維場景進行渲染并顯示之前,需要創(chuàng)建用于存 儲材質(zhì)和與之相對應(yīng)的記錄的分類容器,需要說明的是,前述的記錄包含有物體信息和三 角面信息,前述的物體信息可以是物體游標(biāo)編號Oindex,前述的三角面信息可以是三角面 游標(biāo)編號Tindex。
[0060] 例如分類容器中設(shè)定為〈材質(zhì)編號信息,〈物體信息,物體內(nèi)使用該材質(zhì)三角面 集合vec〉〉,在vec中記錄的是三角面的三角面信息,例如集合vec: {0,6, ···,]!},其中,0,6 表示物體中三角面的游標(biāo)編號Tindex為0, 6,可以理解的是,〈3,〈5, {100,200}〉〉表示為 第5個物體中的第100,第200個三角面使用了材質(zhì)3。
[0061] 202、按照遞增遍歷的方式將三維場景的所有物體一一遍歷,并一一遍歷每個物體 對應(yīng)的三角面;
[0062] 當(dāng)創(chuàng)建了分類容器之后,需要按照遞增遍歷的方式將三維場景的所有物體一一遍 歷,并一一遍歷每個物體對應(yīng)的三角面,需要說明的是,前述的三維場景有若干個物體,每 個物體有若干個三角面,其對應(yīng)若干種材質(zhì)類別。
[0063] 可以理解的是,前述的遞增遍歷的方式將在后續(xù)實施例中進行詳細的描述,此處 不再具體贅述。
[0064] 203、對所有物體的三角面以材質(zhì)進行分類;
[0065] 當(dāng)按照遞增遍歷的方式將三維場景的所有物體--遍歷,并--遍歷每個物體對 應(yīng)的三角面之后,需要對所有物體的三角面以材質(zhì)進行分類,可以理解的是,前述的所有物 體對應(yīng)的所有三角面關(guān)聯(lián)有若干個材質(zhì)類別,需要基于不同的材質(zhì)類別對所有物體及其對 應(yīng)的所有三角面進行編號分類。
[0066] 204、遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄;
[0067] 本發(fā)明實施例中,當(dāng)需要對一個三維場景進行渲染并顯示的時候,首先需要遍歷 分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄。
[0068] 需要說明的是,前述的相對應(yīng)的記錄可以是與三維場景的某一材質(zhì)所有相關(guān)聯(lián)的 記錄,該記錄包含有具備某一材質(zhì)的所有物體的物體信息和在該物體中應(yīng)用前述的材質(zhì)的 所有三角面信息。
[0069] 可以理解的是,前述的分類容器包含有該三維場景所有的材質(zhì),物體和三角面的 相關(guān)信息或數(shù)據(jù)內(nèi)容。
[0070] 205、根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制;
[0071] 當(dāng)從分類容器中提取與三維場景的材質(zhì)相對應(yīng)的記錄之后,需要根據(jù)記錄對與材 質(zhì)相對應(yīng)的所有三角面進行繪制,需要說明的是,根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面 進行繪制將在后續(xù)實施例中進行詳細的描述,此處便不再贅述。
[0072] 206、重復(fù)步驟204對所有類別的材質(zhì)的三角面進行一一渲染。
[0073] 本實施例中,當(dāng)根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制之后,需要重復(fù) 步驟204對所有類別的剩下的材質(zhì)的三角面進行一一渲染,最終僅依靠材質(zhì)進行所有三角 面的一次性渲染。
[0074] 本發(fā)明實施例中,通過先創(chuàng)建用于存儲材質(zhì)和與之相對應(yīng)的記錄的分類容器,再 基于材質(zhì)對三維場景中的物體及其相關(guān)三角面進行分類,通過提取與材質(zhì)相對應(yīng)的記錄, 并根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制,最后就不同的材質(zhì)的所有三角面一一 進行繪制,可以認(rèn)為是直接提取與材質(zhì)相對應(yīng)的記錄并進行批量顯示,因而一種材質(zhì)只渲 染一次,從而減少材質(zhì)應(yīng)用的次數(shù),同時,相應(yīng)地減少了程序和顯卡的交互次數(shù),減少了狀 態(tài)的變化數(shù)量,相應(yīng)地提高了 CPU和GPU的性能。
[0075] 上面是對遍歷分類容器之前的過程進行詳細的描述,下面將對三維場景的材質(zhì)的 分類進行詳細的描述,請參閱圖3,本發(fā)明實施例提供的一種三維場景渲染方法的另一個實 施例包括:
[0076] 301、創(chuàng)建用于存儲材質(zhì)和與之相對應(yīng)的記錄的分類容器;
[0077] 本發(fā)明實施例中,當(dāng)需要對一個三維場景進行渲染并顯示之前,需要創(chuàng)建用于存 儲材質(zhì)和與之相對應(yīng)的記錄的分類容器,需要說明的是,前述的記錄包含有物體信息和三 角面信息,前述的物體信息可以是物體游標(biāo)編號Oindex,前述的三角面信息可以是三角面 游標(biāo)編號Tindex。
[0078] 例如分類容器中設(shè)定為〈材質(zhì)編號信息,〈物體信息,物體內(nèi)使用該材質(zhì)三角面 集合vec〉〉,在vec中記錄的是三角面的三角面信息,例如vec: {0, 6,…,n},其中,0,6表示 物體中三角面的游標(biāo)編號Tindex為0, 6,可以理解的是,〈3,〈5, {100,200}〉〉表示為第5個 物體中的第100,第200個三角面使用了材質(zhì)3。
[0079] 202、按照遞增遍歷的方式將三維場景的所有物體一一遍歷,并獲取與每個物體相 對應(yīng)的模型數(shù)據(jù);
[0080] 當(dāng)創(chuàng)建了分類容器之后,需要按照遞增遍歷的方式將三維場景的所有物體一一遍 歷,并獲取與每個物體相對應(yīng)的模型數(shù)據(jù),需要說明的是,前述的三維場景有若干個物體, 每個物體有若干個三角面,其對應(yīng)若干種材質(zhì)類別,例如設(shè)置物體游標(biāo)編號Oindex為1,當(dāng) 獲取Oindex為1的物體的所有對應(yīng)的模型數(shù)據(jù)之后,再遞增1個物體游標(biāo)編號,如Oindex 為2的物體的所有對應(yīng)的模型數(shù)據(jù),以此類推進行遞增獲取。
[0081] 可以理解的是,前述的模型數(shù)據(jù)包括三角面的頂點數(shù)據(jù)和材質(zhì)數(shù)據(jù)。
[0082] 303、遍歷每個物體對應(yīng)的三角面,并獲取與三角面相對應(yīng)的材質(zhì);
[0083] 當(dāng)獲取到一個物體相對應(yīng)的模型數(shù)據(jù)之后,需要遍歷該物體對應(yīng)的三角面,并獲 取與三角面相對應(yīng)的材質(zhì),例如設(shè)置三角面游標(biāo)編號Tindex為1,當(dāng)獲取Tindex為1的三 角面的所有對應(yīng)的材質(zhì)信息編號之后,再遞增1個三角面游標(biāo)編號,如Tindex為2的物體 的所有對應(yīng)的材質(zhì)信息編號,以此類推進行遞增獲取。
[0084] 可以理解的是,前述的所有物體對應(yīng)的所有三角面關(guān)聯(lián)有若干個材質(zhì)類別,需要 基于不同的材質(zhì)類別對所有物體及其對應(yīng)的所有三角面進行編號分類。
[0085] 304、檢索分類容器中是否存在材質(zhì)和與之相對應(yīng)的記錄,若是,則執(zhí)行步驟305, 若否則執(zhí)行步驟308 ;
[0086] 當(dāng)遍歷每個物體對應(yīng)的三角面,并獲取與三角面相對應(yīng)的材質(zhì)之后,需要檢索分 類容器中是否存在材質(zhì)信息編號和與之相對應(yīng)的記錄,若是,則執(zhí)行步驟305,若否,則執(zhí) 行步驟308,需要說明的是,前述的記錄包含有物體游標(biāo)編號和三角面游標(biāo)編號,例如步驟 301中的記錄為〈材質(zhì)信息編號〈物體游標(biāo)編號Oindex,{:三角面游標(biāo)編號Tindex} >〉,若存 在與材質(zhì)信息編號一致的記錄,則執(zhí)行步驟305,若不存在與材質(zhì)信息編號一致的記錄,則 執(zhí)行步驟308。
[0087] 305、判斷記錄中是否存在有與物體相對應(yīng)的物體信息,若是,則執(zhí)行步驟306,若 否,則執(zhí)行步驟307;
[0088] 當(dāng)判斷存在與材質(zhì)信息編號一致的記錄之后,則需要再判斷記錄中是否存在有與 物體相對應(yīng)的物體信息,例如記錄為〈材質(zhì)信息編號〈物體游標(biāo)編號Oindex, {三角面游標(biāo) 編號Tindex} >〉,存在與物體游標(biāo)編號Oindex -致的物體信息,則執(zhí)行步驟306,若不存在 與物體游標(biāo)編號Oindex -致的物體信息,則執(zhí)行步驟307。
[0089] 306、在記錄中添加與材質(zhì)相對應(yīng)的三角面信息;
[0090] 當(dāng)判斷記錄中存在有與物體相對應(yīng)的物體信息之后,則在記錄中添加與材質(zhì)相對 應(yīng)的二角面?目息,例如記錄為〈材質(zhì)?目息編號〈物體游標(biāo)編號Oindex, {二角面游標(biāo)編號 Tindex} >〉,添加與材質(zhì)相對應(yīng)的三角面游標(biāo)編號Tindexl,則為〈材質(zhì)信息編號〈物體游標(biāo) 編號Oindex, {三角面游標(biāo)編號Tindex,三角面游標(biāo)編號Tindexl} >〉。
[0091] 需要說明的是,當(dāng)在記錄中添加與材質(zhì)相對應(yīng)的三角面信息之后需要重復(fù)步驟 303對該物體相對應(yīng)的所有三角面進行遞增式地一一遍歷,當(dāng)對所有三角面的三角面游標(biāo) 編號Tindex進行遞增式地一一遍歷完成步驟306之后,則需要重復(fù)步驟302對三維場景中 的所有物體的物體游標(biāo)編號Oindex進行遞增式地一一遍歷完成步驟306。
[0092] 307、基于材質(zhì)創(chuàng)建與之相對應(yīng)的記錄;
[0093] 當(dāng)判斷記錄中不存在有與物體相對應(yīng)的物體信息之后,則基于材質(zhì)創(chuàng)建與之 相對應(yīng)的記錄,例如記錄為〈材質(zhì)?目息編號〈物體游標(biāo)編號Oindex, {二角面游標(biāo)編號 Tindex} >〉,則創(chuàng)建與材質(zhì)信息編號相對應(yīng)的記錄〈物體游標(biāo)編號Oindexl,{三角面游標(biāo)編 號Tindex} >,則為材質(zhì)信息編號〈物體游標(biāo)編號Oindex,{:三角面游標(biāo)編號Tindex} >,〈物 體游標(biāo)編號Oindexl, {三角面游標(biāo)編號Tindex} >〉。
[0094] 需要說明的是,當(dāng)基于材質(zhì)創(chuàng)建與之相對應(yīng)的記錄之后需要重復(fù)步驟303對該物 體相對應(yīng)的所有三角面進行遞增式地一一遍歷,當(dāng)對所有三角面的三角面游標(biāo)編號Tindex 進行遞增式地一一遍歷完成步驟307之后,則需要重復(fù)步驟302對三維場景中的所有物體 的物體游標(biāo)編號Oindex進行遞增式地一一遍歷完成步驟307。
[0095] 308、添加材質(zhì)和與之相對應(yīng)的記錄;
[0096] 當(dāng)判斷不存在與材質(zhì)信息編號一致的記錄之后,則添加材質(zhì)和與之相對應(yīng)的記 錄,例如在記錄中沒有與材質(zhì)信息編號一致的記錄時,該材質(zhì)信息編號和預(yù)置相對應(yīng)的記 錄為〈材質(zhì)信息編號〈物體游標(biāo)編號Oindex, {:三角面游標(biāo)編號Tindex} >〉,將該記錄添加 進分類容器中。
[0097] 需要說明的是,當(dāng)添加材質(zhì)和與之相對應(yīng)的記錄之后需要重復(fù)步驟303對該物體 相對應(yīng)的所有三角面進行遞增式地一一遍歷,當(dāng)對所有三角面的三角面游標(biāo)編號Tindex 進行遞增式地一一遍歷完成步驟308之后,則需要重復(fù)步驟302對三維場景中的所有物體 的物體游標(biāo)編號Oindex進行遞增式地一一遍歷完成步驟308。
[0098] 309、遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄;
[0099] 本發(fā)明實施例中,此時當(dāng)需要對一個三維場景進行渲染并顯示的時候,首先需要 遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄。
[0100] 需要說明的是,前述的相對應(yīng)的記錄可以是與三維場景的某一材質(zhì)所有相關(guān)聯(lián)的 記錄,該記錄包含有具備某一材質(zhì)的所有物體的物體信息和在該物體中應(yīng)用前述的材質(zhì)的 所有三角面信息。
[0101] 可以理解的是,前述的分類容器包含有該三維場景所有的材質(zhì),物體和三角面的 相關(guān)信息或數(shù)據(jù)內(nèi)容。
[0102] 310、根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制;
[0103] 當(dāng)從分類容器中提取與三維場景的材質(zhì)相對應(yīng)的記錄之后,需要根據(jù)記錄對與材 質(zhì)相對應(yīng)的所有三角面進行繪制,需要說明的是,根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面 進行繪制將在后續(xù)實施例中進行詳細的描述,此處便不再贅述。
[0104] 311、重復(fù)步驟309對所有類別的材質(zhì)的三角面進行一一渲染。
[0105] 本實施例中,當(dāng)根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制之后,需要重復(fù) 步驟309對所有類別的剩下的材質(zhì)的三角面進行一一渲染,最終僅依靠材質(zhì)進行所有三角 面的一次性渲染。
[0106] 本發(fā)明實施例中,通過先創(chuàng)建用于存儲材質(zhì)和與之相對應(yīng)的記錄的分類容器,再 基于材質(zhì)對三維場景中的物體一一遍歷及其相關(guān)三角面一一遍歷之后進行分類,通過提取 與材質(zhì)相對應(yīng)的記錄,并根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制,最后就不同的 材質(zhì)的所有三角面一一進行繪制,可以是直接提取與材質(zhì)相對應(yīng)的記錄便實現(xiàn)了渲染三維 場景,因而一種材質(zhì)只渲染一次,從而減少材質(zhì)應(yīng)用的次數(shù),同時,相應(yīng)地減少了程序和顯 卡的交互次數(shù),減少了狀態(tài)的變化數(shù)量,相應(yīng)地提高了 CPU和GPU的性能。
[0107] 上面是對三維場景的材質(zhì)的分類進行詳細的描述,下面將對根據(jù)記錄對與材質(zhì)相 對應(yīng)的所有三角面進行繪制的過程進行詳細的描述,請參閱圖4,本發(fā)明實施例提供的一種 三維場景渲染方法的另一個實施例包括:
[0108] 401、創(chuàng)建用于存儲材質(zhì)和與之相對應(yīng)的記錄的分類容器;
[0109] 本發(fā)明實施例中,當(dāng)需要對一個三維場景進行渲染并顯示之前,需要創(chuàng)建用于存 儲材質(zhì)和與之相對應(yīng)的記錄的分類容器,需要說明的是,前述的記錄包含有物體信息和三 角面信息,前述的物體信息可以是物體游標(biāo)編號Oindex,前述的三角面信息可以是三角面 游標(biāo)編號Tindex。
[oho] 例如分類容器中設(shè)定為〈材質(zhì)編號信息,〈物體信息,物體內(nèi)使用該材質(zhì)三角面 集合vec〉〉,在vec中記錄的是三角面的三角面信息,例如vec: {0,6, ···,]!},其中,0,6表示 物體中三角面的游標(biāo)編號Tindex為0, 6,可以理解的是,〈3,〈5, {100,200}〉〉表示為第5個 物體中的第100,第200個三角面使用了材質(zhì)3。
[0111] 402、按照遞增遍歷的方式將三維場景的所有物體一一遍歷,并獲取與每個物體相 對應(yīng)的模型數(shù)據(jù);
[0112] 當(dāng)創(chuàng)建了分類容器之后,需要按照遞增遍歷的方式將三維場景的所有物體一一遍 歷,并獲取與每個物體相對應(yīng)的模型數(shù)據(jù),需要說明的是,前述的三維場景有若干個物體, 每個物體有若干個三角面,其對應(yīng)若干種材質(zhì)類別,例如設(shè)置物體游標(biāo)編號Oindex為1,當(dāng) 獲取Oindex為1的物體的所有對應(yīng)的模型數(shù)據(jù)之后,再遞增1個物體游標(biāo)編號,如Oindex 為2的物體的所有對應(yīng)的模型數(shù)據(jù),以此類推進行遞增獲取。
[0113] 可以理解的是,前述的模型數(shù)據(jù)包括三角面的頂點數(shù)據(jù)和材質(zhì)數(shù)據(jù)。
[0114] 403、遍歷每個物體對應(yīng)的三角面,并獲取與三角面相對應(yīng)的材質(zhì);
[0115] 當(dāng)獲取到一個物體相對應(yīng)的模型數(shù)據(jù)之后,需要遍歷該物體對應(yīng)的三角面,并獲 取與三角面相對應(yīng)的材質(zhì),例如設(shè)置三角面游標(biāo)編號Tindex為1,當(dāng)獲取Tindex為1的三 角面的所有對應(yīng)的材質(zhì)信息編號之后,再遞增1個三角面游標(biāo)編號,如Tindex為2的物體 的所有對應(yīng)的材質(zhì)信息編號,以此類推進行遞增獲取。
[0116] 可以理解的是,前述的所有物體對應(yīng)的所有三角面關(guān)聯(lián)有若干個材質(zhì)類別,需要 基于不同的材質(zhì)類別對所有物體及其對應(yīng)的所有三角面進行編號分類。
[0117] 404、檢索分類容器中是否存在材質(zhì)和與之相對應(yīng)的記錄,若是,則執(zhí)行步驟405, 若否則執(zhí)行步驟408 ;
[0118] 當(dāng)遍歷每個物體對應(yīng)的三角面,并獲取與三角面相對應(yīng)的材質(zhì)之后,需要檢索分 類容器中是否存在材質(zhì)信息編號和與之相對應(yīng)的記錄,若是,則執(zhí)行步驟405,若否,則執(zhí) 行步驟408,需要說明的是,前述的記錄包含有物體游標(biāo)編號和三角面游標(biāo)編號,例如步驟 301中的記錄為〈材質(zhì)信息編號〈物體游標(biāo)編號Oindex,{:三角面游標(biāo)編號Tindex} >〉,若存 在與材質(zhì)信息編號一致的記錄,則執(zhí)行步驟405,若不存在與材質(zhì)信息編號一致的記錄,則 執(zhí)行步驟408。
[0119] 405、判斷記錄中是否存在有與物體相對應(yīng)的物體信息,若是,則執(zhí)行步驟406,若 否,則執(zhí)行步驟407;
[0120] 當(dāng)判斷存在與材質(zhì)信息編號一致的記錄之后,則需要再判斷記錄中是否存在有與 物體相對應(yīng)的物體信息,例如記錄為〈材質(zhì)信息編號〈物體游標(biāo)編號Oindex, {三角面游標(biāo) 編號Tindex} >〉,存在與物體游標(biāo)編號Oindex -致的物體信息,則執(zhí)行步驟406,若不存在 與物體游標(biāo)編號Oindex -致的物體信息,則執(zhí)行步驟407。
[0121] 406、在記錄中添加與材質(zhì)相對應(yīng)的三角面信息;
[0122] 當(dāng)判斷記錄中存在有與物體相對應(yīng)的物體信息之后,則在記錄中添加與材質(zhì)相對 應(yīng)的二角面?目息,例如記錄為〈材質(zhì)?目息編號〈物體游標(biāo)編號Oindex, {二角面游標(biāo)編號 Tindex} >〉,添加與材質(zhì)相對應(yīng)的三角面游標(biāo)編號Tindexl,則為〈材質(zhì)信息編號〈物體游標(biāo) 編號Oindex, {三角面游標(biāo)編號Tindex,三角面游標(biāo)編號Tindexl} >〉。
[0123] 需要說明的是,當(dāng)在記錄中添加與材質(zhì)相對應(yīng)的三角面信息之后需要重復(fù)步驟 403對該物體相對應(yīng)的所有三角面進行遞增式地一一遍歷,當(dāng)對所有三角面的三角面游標(biāo) 編號Tindex進行遞增式地一一遍歷完成步驟406之后,則需要重復(fù)步驟402對三維場景中 的所有物體的物體游標(biāo)編號Oindex進行遞增式地一一遍歷完成步驟406。
[0124] 407、基于材質(zhì)創(chuàng)建與之相對應(yīng)的記錄;
[0125] 當(dāng)判斷記錄中不存在有與物體相對應(yīng)的物體信息之后,則基于材質(zhì)創(chuàng)建與之 相對應(yīng)的記錄,例如記錄為〈材質(zhì)?目息編號〈物體游標(biāo)編號Oindex, {二角面游標(biāo)編號 Tindex} >〉,則創(chuàng)建與材質(zhì)信息編號相對應(yīng)的記錄〈物體游標(biāo)編號Oindexl,{三角面游標(biāo)編 號Tindex} >,則為材質(zhì)信息編號〈物體游標(biāo)編號Oindex,{:三角面游標(biāo)編號Tindex} >,〈物 體游標(biāo)編號Oindexl, {三角面游標(biāo)編號Tindex} >〉。
[0126] 需要說明的是,當(dāng)基于材質(zhì)創(chuàng)建與之相對應(yīng)的記錄之后需要重復(fù)步驟403對該物 體相對應(yīng)的所有三角面進行遞增式地一一遍歷,當(dāng)對所有三角面的三角面游標(biāo)編號Tindex 進行遞增式地一一遍歷完成步驟407之后,則需要重復(fù)步驟402對三維場景中的所有物體 的物體游標(biāo)編號Oindex進行遞增式地一一遍歷完成步驟407。
[0127] 408、添加材質(zhì)和與之相對應(yīng)的記錄;
[0128] 當(dāng)判斷不存在與材質(zhì)信息編號一致的記錄之后,則添加材質(zhì)和與之相對應(yīng)的記 錄,例如在記錄中沒有與材質(zhì)信息編號一致的記錄時,該材質(zhì)信息編號和預(yù)置相對應(yīng)的記 錄為〈材質(zhì)信息編號〈物體游標(biāo)編號Oindex, {:三角面游標(biāo)編號Tindex}〉〉,將該記錄添加 進分類容器中。
[0129] 需要說明的是,當(dāng)添加材質(zhì)和與之相對應(yīng)的記錄之后需要重復(fù)步驟403對該物體 相對應(yīng)的所有三角面進行遞增式地一一遍歷,當(dāng)對所有三角面的三角面游標(biāo)編號Tindex 進行遞增式地一一遍歷完成步驟408之后,則需要重復(fù)步驟402對三維場景中的所有物體 的物體游標(biāo)編號Oindex進行遞增式地一一遍歷完成步驟408。
[0130] 409、遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄;
[0131] 本發(fā)明實施例中,此時當(dāng)需要對一個三維場景進行渲染并顯示的時候,首先需要 遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄。
[0132] 需要說明的是,前述的相對應(yīng)的記錄可以是與三維場景的某一材質(zhì)所有相關(guān)聯(lián)的 記錄,該記錄包含有具備某一材質(zhì)的所有物體的物體信息和在該物體中應(yīng)用前述的材質(zhì)的 所有三角面信息。
[0133] 可以理解的是,前述的分類容器包含有該三維場景所有的材質(zhì),物體和三角面的 相關(guān)信息或數(shù)據(jù)內(nèi)容。
[0134] 410、通過記錄獲取相應(yīng)的模型數(shù)據(jù);
[0135] 當(dāng)從分類容器中提取與三維場景的材質(zhì)相對應(yīng)的記錄之后,需要通過記錄獲取相 應(yīng)的模型數(shù)據(jù),例如通過該記錄的物體的物體游標(biāo)編號Oindex和三角面的三角面游標(biāo)編 號Tindex的集合,解析與前述的物體游標(biāo)編號Oindex和三角面的三角面游標(biāo)編號Tindex 相對應(yīng)的模型數(shù)據(jù),需要說明的是,前述的模型數(shù)據(jù)包括三角面的頂點數(shù)據(jù)和材質(zhì)數(shù)據(jù)。
[0136] 411、根據(jù)模型數(shù)據(jù)對與材質(zhì)相對應(yīng)的所有三角面進行繪制,并應(yīng)用材質(zhì);
[0137] 當(dāng)通過記錄獲取相應(yīng)的模型數(shù)據(jù)之后,需要根據(jù)模型數(shù)據(jù)中的所有三角面的頂點 數(shù)據(jù)對與材質(zhì)相對應(yīng)的所有三角面進行繪制,并應(yīng)用材質(zhì),可以理解的是,當(dāng)獲取到所有三 角面的頂點數(shù)據(jù)之后可以是先對所有的頂點數(shù)據(jù)應(yīng)用與之對應(yīng)的材質(zhì)數(shù)據(jù)再對相對應(yīng)的 所有三角面進行繪制。
[0138] 412、重復(fù)步驟409對所有類別的材質(zhì)的三角面進行--渲染。
[0139] 本實施例中,當(dāng)根據(jù)記錄對與材質(zhì)相對應(yīng)的所有三角面進行繪制之后,需要重復(fù) 步驟409對所有類別的剩下的材質(zhì)的三角面進行一一渲染,最終僅依靠材質(zhì)進行所有三角 面的一次性渲染。
[0140] 本發(fā)明實施例中,通過先創(chuàng)建用于存儲材質(zhì)和與之相對應(yīng)的記錄的分類容器,再 基于材質(zhì)對三維場景中的物體一一遍歷及其相關(guān)三角面一一遍歷之后進行分類,通過提取 與材質(zhì)相對應(yīng)的記錄,并根據(jù)模型數(shù)據(jù)對與材質(zhì)相對應(yīng)的所有三角面進行繪制,并應(yīng)用材 質(zhì),最后就不同的材質(zhì)的所有三角面一一進行繪制,可以是直接提取與材質(zhì)相對應(yīng)的記錄 便實現(xiàn)了渲染三維場景,因而一種材質(zhì)只渲染一次,從而減少材質(zhì)應(yīng)用的次數(shù),同時,相應(yīng) 地減少了程序和顯卡的交互次數(shù),減少了狀態(tài)的變化數(shù)量,相應(yīng)地提高了 CPU和GPU的性 能。
[0141] 以上所述,以上實施例僅用以說明本發(fā)明實施例提供的一種三維場景渲染方法的 技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通 技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中 部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā) 明各實施例技術(shù)方案的精神和范圍。
【權(quán)利要求】
1. 一種三維場景渲染方法,其特征在于,包括: 51 :遍歷分類容器,并從中提取與三維場景的材質(zhì)相對應(yīng)的記錄; 52 :根據(jù)所述記錄對與所述材質(zhì)相對應(yīng)的所有三角面進行繪制; 53 :重復(fù)步驟S1對所有類別的材質(zhì)的三角面進行一一渲染。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1之前還包括: 創(chuàng)建用于存儲所述材質(zhì)和與之相對應(yīng)的所述記錄的所述分類容器,所述記錄包含有物 體息和二角面息。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1之前還包括: 按照遞增遍歷的方式將所述三維場景的所有物體,及每個所述物體對應(yīng)的三角面一一 遍歷; 對所述所有物體的所述三角面以所述材質(zhì)進行分類。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,按照遞增遍歷的方式將所述三維場景的 所有物體,及每個所述物體對應(yīng)的三角面 遍歷具體包括: 按照遞增遍歷的方式將所述三維場景的所有物體一一遍歷,并獲取與每個所述物體相 對應(yīng)的模型數(shù)據(jù); 遍歷每個所述物體對應(yīng)的所述三角面,并獲取與所述三角面相對應(yīng)的所述材質(zhì)。
5. 根據(jù)權(quán)利要求3所述的方法,其特征在于,對所述所有物體的所述三角面以材質(zhì)進 行分類具體包括: 檢索所述分類容器中是否存在所述材質(zhì)和與之相對應(yīng)的所述記錄,若是,則觸發(fā)進階 判斷模式,若否,則添加所述材質(zhì)和與之相對應(yīng)的所述記錄。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述進階判斷模式具體包括: 判斷所述記錄中是否存在有與所述物體相對應(yīng)的物體信息,若是,則在所述記錄中添 加與所述材質(zhì)相對應(yīng)的三角面信息,若否,則基于所述材質(zhì)創(chuàng)建與之相對應(yīng)的所述記錄。
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S2具體包括: 通過所述記錄獲取相應(yīng)的模型數(shù)據(jù); 根據(jù)所述模型數(shù)據(jù)對與所述材質(zhì)相對應(yīng)的所有三角面進行繪制,并應(yīng)用所述材質(zhì)。
8. 根據(jù)權(quán)利要求2所述的方法,其特征在于, 所述物體信息為物體游標(biāo)編號; 所述三角面信息為三角面游標(biāo)編號。
9. 根據(jù)權(quán)利要求4或7所述的方法,其特征在于,所述模型數(shù)據(jù)包括三角面的頂點數(shù)據(jù) 和材質(zhì)數(shù)據(jù)。
10. 根據(jù)權(quán)利要求1或3所述的方法,其特征在于,所述材質(zhì)為材質(zhì)編號信息。
【文檔編號】G06T15/00GK104156999SQ201410398934
【公開日】2014年11月19日 申請日期:2014年8月13日 優(yōu)先權(quán)日:2014年8月13日
【發(fā)明者】潘桂聰, 陳泓坤 申請人:廣東威創(chuàng)視訊科技股份有限公司