一種基于頂點(diǎn)編碼的四邊形網(wǎng)格細(xì)分曲面存取方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)檢測技術(shù)領(lǐng)域,具體涉及一種基于頂點(diǎn)編碼的四邊形網(wǎng)格細(xì)分曲面存取方法。
【背景技術(shù)】
[0002]四邊形網(wǎng)格細(xì)分曲面被廣泛應(yīng)用于實(shí)體造型、影視渲染、游戲動(dòng)畫制作等領(lǐng)域。它通過對(duì)四邊形進(jìn)行細(xì)分,使原有網(wǎng)格更加平順。但是,四邊形網(wǎng)格細(xì)分曲面存儲(chǔ),通常需要保持頂點(diǎn)坐標(biāo)和拓?fù)浣Y(jié)構(gòu),隨著細(xì)分層次的增加,細(xì)分曲面的單元個(gè)數(shù)呈幾何級(jí)數(shù)增長,內(nèi)存占用量急劇上升,最終會(huì)導(dǎo)致內(nèi)存溢出。
[0003]目前,通常采用自適應(yīng)細(xì)分的方法來降低四邊形網(wǎng)格細(xì)分曲面內(nèi)存占用量,即利用透視投影的機(jī)制,對(duì)于能夠顯示在視窗中的四邊形單元進(jìn)行細(xì)分,而不能顯示的部分不做處理。由于這種方法對(duì)視覺效果沒有影響,所以被廣泛應(yīng)用于影視渲染和游戲動(dòng)畫制作,但是,這種方法卻不適用實(shí)體造型,因?yàn)閷?shí)體造型通常需要對(duì)所有單元進(jìn)行細(xì)分。
[0004]為此,本發(fā)明提出一種基于頂點(diǎn)編碼的四邊形網(wǎng)格細(xì)分曲面存取方法,通過一種編碼方法將不同頂點(diǎn)與其所在的存儲(chǔ)位置唯一對(duì)應(yīng),提高了訪存效率,同時(shí)利用編碼的組合,可以確定細(xì)分曲面內(nèi)的任意頂點(diǎn)和單元,避免了由于保存細(xì)分曲面拓?fù)浣Y(jié)構(gòu)而帶來的內(nèi)存開銷,本方法廣泛適用于實(shí)體造型、影視渲染和游戲動(dòng)畫,可以提高內(nèi)存利用率55%以上。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有技術(shù)所存在的上述技術(shù)缺陷,本發(fā)明提供了一種基于頂點(diǎn)編碼的四邊形網(wǎng)格細(xì)分曲面存取方法,利用一種頂點(diǎn)編碼方法將頂點(diǎn)與其所在存儲(chǔ)位置唯一對(duì)應(yīng),提高了內(nèi)存利用率。
[0006]一種基于頂點(diǎn)編碼的四邊形網(wǎng)格細(xì)分曲面存取方法,包括如下步驟:
[0007]步驟(1)對(duì)輸入的待細(xì)分四邊形,依據(jù)給定的最大細(xì)分層次,為待細(xì)分四邊形的四個(gè)頂點(diǎn)編碼;
[0008]步驟(2)對(duì)步驟(1)中的待細(xì)分四邊形進(jìn)行遞歸細(xì)分,直至達(dá)到給定的最大細(xì)分層次,且每次細(xì)分過程中,對(duì)新生成的頂點(diǎn)進(jìn)行編碼;
[0009]步驟(3)計(jì)算每個(gè)頂點(diǎn)編碼在頂點(diǎn)數(shù)組中的位置,然后將每個(gè)頂點(diǎn)的坐標(biāo)存入頂點(diǎn)數(shù)組中該頂點(diǎn)編碼對(duì)應(yīng)的位置。
[0010]步驟(4)依據(jù)最頂層細(xì)分曲面四個(gè)角點(diǎn)的編碼,計(jì)算出邊中心和面中心的編碼,進(jìn)而通過遞歸方式得到所有細(xì)分曲面中四邊形單元的頂點(diǎn)編碼,依據(jù)頂點(diǎn)編碼計(jì)算出該頂點(diǎn)在頂點(diǎn)數(shù)組中的位置,然后根據(jù)計(jì)算出的位置提取頂點(diǎn)坐標(biāo)。
[0011]所述的步驟(1)中對(duì)輸入的待細(xì)分四邊形網(wǎng)格模型,依據(jù)給定的最大細(xì)分層次,為待細(xì)分四邊形的四個(gè)頂點(diǎn)編碼,包括如下步驟:
[0012]1-1.依據(jù)給定的最大細(xì)分層次m,計(jì)算出經(jīng)過m次細(xì)分后每行和每列的頂點(diǎn)個(gè)數(shù)η,
[0013]1-2.按照順時(shí)針順序,采用十進(jìn)制整數(shù)對(duì)待細(xì)分四邊形的四個(gè)頂點(diǎn)編碼,該十進(jìn)制整數(shù)的前兩位對(duì)應(yīng)該頂點(diǎn)所在列的列號(hào),后兩位對(duì)應(yīng)該頂點(diǎn)所在行的行號(hào),具體的:
[0014]1-2-1.任意選取待細(xì)分四邊形中的一個(gè)頂點(diǎn)作為起始頂點(diǎn),行號(hào)列號(hào)均為1,
[0015]1-2-2.沿順時(shí)針方向選取下一個(gè)頂點(diǎn),列號(hào)為1,行號(hào)為η ;
[0016]1-2-3.沿順時(shí)針方向選取下一個(gè)頂點(diǎn),行號(hào)列號(hào)均為η ;
[0017]1-2-4.沿順時(shí)針方向選取下一個(gè)頂點(diǎn),列號(hào)為η,行號(hào)為1 ;
[0018]所述的步驟(2)中,對(duì)步驟(1)中的待細(xì)分四邊形進(jìn)行遞歸細(xì)分,直至達(dá)到給定的最大細(xì)分層次,且每次細(xì)分過程中,對(duì)新生成的頂點(diǎn)進(jìn)行編碼,具體包括如下步驟:
[0019]2-1.依據(jù)細(xì)分規(guī)則,更新原有頂點(diǎn)坐標(biāo),并生成新的邊中心點(diǎn)和面中心點(diǎn),邊中心點(diǎn)編碼為該所在邊的兩個(gè)頂點(diǎn)編碼平均數(shù),面中心點(diǎn)編碼為所在面對(duì)角線上頂點(diǎn)編碼平均數(shù);
[0020]2-2.重復(fù)步驟2-1,直至達(dá)到最大細(xì)分層次。
[0021]所述的步驟(3)中計(jì)算每個(gè)頂點(diǎn)編碼在頂點(diǎn)數(shù)組中的位置,采用如下公式:
[0022](number/MAX-1) Xn+number% MAX-1 ;
[0023]其中number為頂點(diǎn)編碼,MAX選取剛好大于η的10的整數(shù)次冪;
[0024]所述的步驟(4)中依據(jù)頂點(diǎn)編碼計(jì)算出該頂點(diǎn)在頂點(diǎn)數(shù)組中的位置,然后根據(jù)計(jì)算出的位置提取頂點(diǎn)坐標(biāo),其頂點(diǎn)在頂點(diǎn)數(shù)組中的位置的計(jì)算采用如下公式:
[0025](number/MAX-1) Xn+number% MAX-1
[0026]其中number為頂點(diǎn)編碼,MAX選取剛好大于η的10的整數(shù)倍。
[0027]所述的步驟(2)中,采用Catmull-Clark方法對(duì)四邊形進(jìn)行細(xì)分。
[0028]本發(fā)明有益效果如下:
[0029]本發(fā)明通過一種編碼方法將不同頂點(diǎn)與其所在的存儲(chǔ)位置唯一對(duì)應(yīng),同時(shí)利用編碼和編碼的疊加,可以確定細(xì)分曲面內(nèi)的任意頂點(diǎn)和單元,避免了由于保存細(xì)分曲面拓?fù)浣Y(jié)構(gòu)而帶來的內(nèi)存開銷,本方法廣泛適用于實(shí)體造型、影視渲染和游戲動(dòng)畫,可以提高內(nèi)存利用率55%以上。
【發(fā)明內(nèi)容】
[0030]
【附圖說明】
[0031]圖1為本發(fā)明四邊形網(wǎng)格細(xì)分曲面存取方法的步驟流程示意圖;
[0032]圖2(a)為對(duì)輸入的原始四邊形編碼;
[0033]圖2 (b)為第一次細(xì)分結(jié)果;
[0034]圖2 (c)為第二次細(xì)分結(jié)果;
【具體實(shí)施方式】
[0035]為了更為具體地描述本發(fā)明,下面結(jié)合附圖及【具體實(shí)施方式】對(duì)本發(fā)明的四邊形網(wǎng)格細(xì)分曲面存取方法進(jìn)行詳細(xì)說明。
[0036]如圖1所示,一種基于頂點(diǎn)編碼四邊形網(wǎng)格細(xì)分曲面存取方法,包括如下步驟:
[0037]步驟(1)對(duì)輸入的原始四邊形,依據(jù)給定的最大細(xì)分層次,為待細(xì)分四邊形的四個(gè)頂點(diǎn)編碼,如圖2(a)所示;
[0038]對(duì)輸入的原始四邊形網(wǎng)格模型,依據(jù)給定的最大細(xì)分層次,為待細(xì)分的四邊形四個(gè)頂點(diǎn)編碼,包括如下步驟:
[0039]1-1.依據(jù)給定的最大細(xì)分層次m,計(jì)算出經(jīng)過m次細(xì)分后每行和每列的頂點(diǎn)個(gè)數(shù)η,
[0040]1-2.按照順時(shí)針順序,用一個(gè)十進(jìn)制整數(shù)對(duì)四邊形四個(gè)頂