[發(fā)明專利]一種高效組織和切換OpenGL渲染狀態(tài)的方法有效
| 申請?zhí)枺?/td> | 201710600299.8 | 申請日: | 2017-07-21 |
| 公開(公告)號(hào): | CN107845144B | 公開(公告)日: | 2021-04-02 |
| 發(fā)明(設(shè)計(jì))人: | 王茂松;俞蔚 | 申請(專利權(quán))人: | 浙江科瀾信息技術(shù)有限公司 |
| 主分類號(hào): | G06T19/20 | 分類號(hào): | G06T19/20 |
| 代理公司: | 浙江杭知橋律師事務(wù)所 33256 | 代理人: | 王梨華;陳麗霞 |
| 地址: | 310051 浙江省杭州*** | 國省代碼: | 浙江;33 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 高效 組織 切換 opengl 渲染 狀態(tài) 方法 | ||
1.一種高效組織和切換OpenGL渲染狀態(tài)的方法,其特征在于,包括如下步驟:
步驟(1)、將場景圖形結(jié)構(gòu)裁剪為包含渲染順序數(shù)值的場景節(jié)點(diǎn)和渲染狀態(tài)屬性集的場景節(jié)點(diǎn),并得到渲染葉子節(jié)點(diǎn),其中,基于所述渲染順序數(shù)值建立第一渲染順序樹,基于所述渲染狀態(tài)屬性集建立第一渲染狀態(tài)樹;
步驟(2)、對于所述第一渲染順序樹進(jìn)行透明渲染處理;將需要排序的所述渲染葉子節(jié)點(diǎn)從第一渲染狀態(tài)樹轉(zhuǎn)移到第一渲染順序樹中,然后根據(jù)所述渲染葉子節(jié)點(diǎn)的距離值進(jìn)行排序操作,形成第二渲染順序樹;摘除渲染葉子節(jié)點(diǎn)的渲染狀態(tài)樹形成第二渲染狀態(tài)樹;
步驟(3)、對于步驟(2)中建立的所述第二渲染順序樹和第二渲染狀態(tài)樹進(jìn)行依次遍歷,遍歷過程中搜集到的狀態(tài)屬性,即為渲染當(dāng)前渲染葉子節(jié)點(diǎn)所必要的狀態(tài)屬性,將這些渲染狀態(tài)存放在棧結(jié)構(gòu),渲染引擎依據(jù)棧結(jié)構(gòu)切換必要的渲染狀態(tài)后,進(jìn)行實(shí)體節(jié)點(diǎn)中網(wǎng)格數(shù)據(jù)的提交和繪制,實(shí)現(xiàn)場景節(jié)點(diǎn)的渲染狀態(tài)和網(wǎng)格數(shù)據(jù)的繪制。
2.根據(jù)權(quán)利要求1所述的一種高效組織和切換OpenGL渲染狀態(tài)的方法,其中所述步驟(1)包括將所述第一渲染順序樹與所述第一渲染狀態(tài)樹進(jìn)行關(guān)聯(lián)。
3.根據(jù)權(quán)利要求1所述的一種高效組織和切換OpenGL渲染狀態(tài)的方法,其中所述步驟(2)根據(jù)所述渲染葉子節(jié)點(diǎn)的距離值進(jìn)行排序操作具體包括按渲染葉子節(jié)點(diǎn)離相機(jī)的距離值進(jìn)行由遠(yuǎn)到近排序。
4.根據(jù)權(quán)利要求1所述的一種高效組織和切換OpenGL渲染狀態(tài)的方法,其中所述步驟(3)包括通過回溯查找算法,搜集并切換節(jié)點(diǎn)上的OpenGL狀態(tài)屬性,完成當(dāng)前渲染葉子節(jié)點(diǎn)所需的狀態(tài)屬性的切換。
5.根據(jù)權(quán)利要求2所述的一種高效組織和切換OpenGL渲染狀態(tài)的方法,其中所述關(guān)聯(lián)包括:
步驟(11)、所述第一渲染順序樹和第一渲染狀態(tài)樹均具有根節(jié)點(diǎn)和當(dāng)前節(jié)點(diǎn),當(dāng)前節(jié)點(diǎn)的起始指向?yàn)楦?jié)點(diǎn);
步驟(12)、對所述場景圖形結(jié)構(gòu)進(jìn)行裁剪遍歷,依據(jù)從場景節(jié)點(diǎn)中提取的渲染順序值,新建渲染順序節(jié)點(diǎn),并將該渲染順序節(jié)點(diǎn)作為當(dāng)前渲染順序節(jié)點(diǎn)的子節(jié)點(diǎn),插入到當(dāng)前渲染順序節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中;然后將新建節(jié)點(diǎn)作為渲染順序樹的當(dāng)前渲染順序節(jié)點(diǎn);
步驟(13)、同時(shí)從所述場景節(jié)點(diǎn)中提取渲染狀態(tài)屬性集,如果存在狀態(tài)屬性集,新建渲染狀態(tài)節(jié)點(diǎn),并將該節(jié)點(diǎn)作為當(dāng)前渲染狀態(tài)節(jié)點(diǎn)的子節(jié)點(diǎn),插入到當(dāng)前渲染狀態(tài)節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中;然后將新建節(jié)點(diǎn)作為渲染狀態(tài)樹的當(dāng)前渲染狀態(tài)節(jié)點(diǎn);
步驟(14)、當(dāng)裁剪操作裁剪到實(shí)體節(jié)點(diǎn)時(shí);在執(zhí)行步驟(12)步驟(13)操作的之后,依據(jù)實(shí)體節(jié)點(diǎn)中包含的網(wǎng)格實(shí)體和變換矩陣信息,新建渲染葉子節(jié)點(diǎn),將該渲染葉子節(jié)點(diǎn)插入到步驟(13)的當(dāng)前渲染狀態(tài)節(jié)點(diǎn)的渲染葉子鏈表中;并將該當(dāng)前渲染狀態(tài)節(jié)點(diǎn)插入到步驟(12)的當(dāng)前渲染順序節(jié)點(diǎn)的渲染狀態(tài)節(jié)點(diǎn)鏈表中;
步驟(15)根據(jù)場景圖在裁剪器的裁剪過程中,當(dāng)前渲染順序節(jié)點(diǎn)和當(dāng)前渲染狀態(tài)節(jié)點(diǎn)進(jìn)行同步下移和回溯操作,當(dāng)場景圖被裁剪完畢以后,所述第一渲染順序樹和第一渲染狀態(tài)樹關(guān)聯(lián)完畢。
6.根據(jù)權(quán)利要求3所述的一種高效組織和切換OpenGL渲染狀態(tài)的方法,其中所述步驟(2)包括:
步驟(21)在裁剪階段完成之后,進(jìn)行所述第一渲染順序樹的排序操作,當(dāng)遇到渲染順序節(jié)點(diǎn)的渲染順序值為5時(shí),表明該節(jié)點(diǎn)下所掛接的渲染實(shí)體為透明或半透明實(shí)體,同時(shí),將該渲染順序節(jié)點(diǎn)下的渲染狀態(tài)節(jié)點(diǎn)鏈表中所有渲染狀態(tài)節(jié)點(diǎn)的渲染葉子節(jié)點(diǎn)轉(zhuǎn)移到渲染順序節(jié)點(diǎn)的渲染葉子節(jié)點(diǎn)鏈表中;
步驟(22)對該渲染順序節(jié)點(diǎn)的渲染葉子節(jié)點(diǎn)鏈表中節(jié)點(diǎn)按照在場景中離相機(jī)的距離值,由大到小進(jìn)行排序操作;
步驟(23)在所述第一渲染順序樹中先渲染不透明節(jié)點(diǎn),再渲染透明或者半透明節(jié)點(diǎn);再對透明或者半透明節(jié)點(diǎn)進(jìn)行了距離的排序,先渲染距離遠(yuǎn)的節(jié)點(diǎn),后渲染距離近的節(jié)點(diǎn);
步驟(24)到達(dá)渲染階段之后,如果渲染順序節(jié)點(diǎn)的渲染葉子鏈表里有節(jié)點(diǎn)數(shù)據(jù),便可直接執(zhí)行后面步驟(3)的進(jìn)行依次遍歷收集實(shí)體節(jié)點(diǎn)需要的渲染狀態(tài)操作。
該專利技術(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/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- OPENGL到OPENGL│ES翻譯器和OPENGL│ES仿真器
- Android平臺(tái)兼容本地代碼OpenGL程序的系統(tǒng)及方法
- 開放式圖形庫操作的處理方法和裝置
- 基于OpenGL View的控制方法、裝置及終端
- 一種基于OpenGL的MiniGUI窗口系統(tǒng)支持方法
- 一種OpenGL多重嵌套顯示列表調(diào)用方法
- 一種基于iOS移動(dòng)終端的屏幕截圖投射方法
- 圖形資源轉(zhuǎn)換方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)
- 一種優(yōu)化的OpenGL圖形屬性排布方法
- OpenGL驅(qū)動(dòng)的錯(cuò)誤分級處理方法、裝置和電子設(shè)備





