[發(fā)明專利]一種高效組織和切換OpenGL渲染狀態(tài)的方法有效
| 申請?zhí)枺?/td> | 201710600299.8 | 申請日: | 2017-07-21 |
| 公開(公告)號: | CN107845144B | 公開(公告)日: | 2021-04-02 |
| 發(fā)明(設(shè)計)人: | 王茂松;俞蔚 | 申請(專利權(quán))人: | 浙江科瀾信息技術(shù)有限公司 |
| 主分類號: | G06T19/20 | 分類號: | G06T19/20 |
| 代理公司: | 浙江杭知橋律師事務(wù)所 33256 | 代理人: | 王梨華;陳麗霞 |
| 地址: | 310051 浙江省杭州*** | 國省代碼: | 浙江;33 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 高效 組織 切換 opengl 渲染 狀態(tài) 方法 | ||
本發(fā)明涉及計算機技術(shù)領(lǐng)域,公開了一種高效組織和切換OpenGL渲染狀態(tài)的方法,包括以下步驟:步驟(1)對場景圖中的存在渲染順序值的場景節(jié)點和渲染狀態(tài)屬性集的場景節(jié)點進行渲染順序樹和渲染狀態(tài)樹形結(jié)構(gòu)的建立;步驟(2)兩個樹形結(jié)構(gòu)建立完畢以后,對渲染葉子節(jié)點進行必要的排序工作,由渲染順序樹根節(jié)點開始遍歷,渲染實體節(jié)點;步驟(3)依據(jù)渲染狀態(tài)樹的樹形結(jié)構(gòu),切換并應(yīng)用該渲染葉子節(jié)點對應(yīng)的OpenGL狀態(tài)屬性,達(dá)到某種OpenGL狀態(tài)之后,進行渲染葉子節(jié)點網(wǎng)格數(shù)據(jù)的提交渲染。本發(fā)明通過對渲染場景節(jié)點有效的組織,建立合理可靠的樹形結(jié)構(gòu),使三維渲染引擎各線程之間的壓力均衡,并減少了狀態(tài)屬性管理的開銷,渲染幀率更高,場景漫游更流暢。
技術(shù)領(lǐng)域
本發(fā)明涉及三維渲染技術(shù)領(lǐng)域,特別是涉及渲染引擎中高效組織和切換OpenGL(Open Graphics Library,開放圖形庫)渲染狀態(tài)的方法。
背景技術(shù)
通過用戶給出的三維場景圖形結(jié)構(gòu),在渲染的過程中,實體節(jié)點繪制之前,要進行該節(jié)點的正確渲染狀態(tài)的切換,如果不進行渲染狀態(tài)的管理,并沒有對擁有同一狀態(tài)屬性集的節(jié)點進行合并,每個實體節(jié)點渲染時面臨著巨大的狀態(tài)搜集、切換和還原開銷;如果對場景實體節(jié)點根據(jù)渲染狀態(tài)屬性進行過當(dāng)?shù)慕M織管理,那根據(jù)狀態(tài)屬性組織管理節(jié)點帶來的開銷亦嚴(yán)重影響了渲染引擎的效率;上述兩種情況都會造成渲染引擎所渲染的場景出現(xiàn)卡頓甚至明顯的跳幀行為,極大的影響了用戶的視覺體驗。
發(fā)明內(nèi)容
本發(fā)明針對現(xiàn)有技術(shù)中渲染引擎在渲染較大場景時出現(xiàn)的渲染效率低下、卡頓甚至跳幀現(xiàn)象,提供一種高效組織和切換OpenGL渲染狀態(tài)的方法。
為解決上述技術(shù)問題,本發(fā)明提出了一種高效組織和切換OpenGL渲染狀態(tài)的方法,其特征在于,包括如下步驟:
步驟(1)、將場景圖形結(jié)構(gòu)裁剪為包含渲染順序數(shù)值的場景節(jié)點和渲染狀態(tài)屬性集的場景節(jié)點,并得到渲染葉子節(jié)點,其中,基于所述渲染順序數(shù)值建立第一渲染順序樹,基于所述渲染狀態(tài)屬性集建立第一渲染狀態(tài)樹;
步驟(2)、對于所述第一渲染順序樹進行透明渲染處理;將需要排序的所述渲染葉子節(jié)點從第一渲染狀態(tài)樹轉(zhuǎn)移到第一渲染順序樹中,然后根據(jù)所述渲染葉子節(jié)點的距離值進行排序操作,形成第二渲染順序樹;摘除渲染葉子節(jié)點的渲染狀態(tài)樹形成第二渲染狀態(tài)樹。
步驟(3)、對于步驟(2)中建立的所述第二渲染順序樹和第二渲染狀態(tài)樹進行依次遍歷,遍歷過程中搜集到的狀態(tài)屬性,即為渲染當(dāng)前渲染葉子節(jié)點所必要的狀態(tài)屬性,將這些渲染狀態(tài)存放在棧結(jié)構(gòu),渲染引擎依據(jù)棧結(jié)構(gòu)切換必要的渲染狀態(tài)后,進行實體節(jié)點中網(wǎng)格數(shù)據(jù)的提交和繪制,實現(xiàn)場景節(jié)點的渲染狀態(tài)和網(wǎng)格數(shù)據(jù)的繪制。
其中,所述步驟(1)包括將所述第一渲染順序樹與所述第一渲染狀態(tài)樹進行關(guān)聯(lián)。
其中,所述步驟(2)根據(jù)所述渲染葉子節(jié)點的距離值進行排序操作具體包括按渲染葉子節(jié)點離相機的距離值進行由遠(yuǎn)到近排序。
其中,所述步驟(3)包括通過回溯查找算法,搜集并切換該路由上的OpenGL狀態(tài)屬性,完成當(dāng)前渲染葉子節(jié)點所需的狀態(tài)屬性的切換。
其中,所述關(guān)聯(lián)包括:
步驟(11)、所述第一渲染順序樹和第一渲染狀態(tài)樹均具有根節(jié)點和當(dāng)前節(jié)點,當(dāng)前節(jié)點的起始指向為根節(jié)點;
步驟(12)、對所述場景圖形結(jié)構(gòu)進行裁剪遍歷,依據(jù)從場景節(jié)點中提取的渲染順序值,新建渲染順序節(jié)點,并將該渲染順序節(jié)點作為當(dāng)前渲染順序節(jié)點的子節(jié)點,插入到當(dāng)前渲染順序節(jié)點的子節(jié)點鏈表中;然后將新建節(jié)點作為渲染順序樹的當(dāng)前渲染順序節(jié)點;
步驟(13)、同時從所述場景節(jié)點中提取渲染狀態(tài)屬性集,如果存在狀態(tài)屬性集,新建渲染狀態(tài)節(jié)點,并將該節(jié)點作為當(dāng)前渲染狀態(tài)節(jié)點的子節(jié)點,插入到當(dāng)前渲染狀態(tài)節(jié)點的子節(jié)點鏈表中;然后將新建節(jié)點作為渲染狀態(tài)樹的當(dāng)前渲染狀態(tài)節(jié)點;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于浙江科瀾信息技術(shù)有限公司,未經(jīng)浙江科瀾信息技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710600299.8/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





