本申請屬于stl模型輕量化,具體涉及一種基于opengl渲染可視化判定的stl模型輕量化方法。
背景技術:
1、相對技術中的輕量化方法主要是基于可視化角度的優化,利用可視錐等技術識別并剔除模型內部的不可視面片,從而減少面片數量。然而,基于拓撲的面片縮減方法容易導致模型的失真,基于可視錐的縮減方法需要對模型面片進行光線追蹤法的射線相交計算,這增加了編程復雜度和計算任務量,基于gpu的大規模對象縮減方法對于整體模型過于簡化,無法應用于機械零件的模型輕量化縮減。
2、為此,在保持stl模型面片精細度的同時,本發明從gpu的圖像渲染計算角度出發,將傳統的空間可視化計算轉換為基于圖形渲染的計算,以簡化編程計算的復雜度并將復雜運算轉由gpu計算完成,在提高計算效率的同時大幅度的降低了編程的難度。
技術實現思路
1、發明目的:提供一種面向三維模型stl文件基于可視性的面片縮減的輕量化算法,以解決傳統基于三維模型空間可視化判定算法的復雜算法邏輯以及模型面片過渡簡化導致的失真等問題,通過基于gpu的圖像空間渲染計算實現整體算法簡化與良好的可封裝性等。
2、本申請提供了一種基于opengl渲染可視化判定的stl模型輕量化方法,所述方法包括:
3、步驟1、針對三維模型,首先給定可視化判定的視角,并獲取其空間尺寸大小;
4、步驟2、針對三維模型的渲染,在opengl中配置;
5、步驟3、對于三維模型的stl文件,對于每一個面片指定順序遍歷唯一索引i,然后基于預設規則將i轉換為rgb的顏色;
6、步驟4、對于每一面片設定顏色為基于i轉換的rgb,進行三維模型stl文件渲染;
7、步驟5、模型渲染結束后,讀取其顏色緩存;
8、步驟6、對于顏色緩存中全體像素,進行基于存儲顏色rgb解析出索引號i=r×256×256+g×256+b,標記三維模型中索引號i的面片;
9、步驟7、按照步驟2至步驟6對于多個視角進行計算;
10、步驟8、對于三維模型所有未標記的面片進行刪除,然后得到輕量化的stl文件。
11、優選地,所述預設規則如下:r=int(i/(256×256)),g=mod(int(i/256)/256),b=mod(i/256);其中,int()為取整,mod()為求余。
12、優選地,所述步驟2包括:
13、視景體完全包含三維模型;視口設置為可視化判定方向;投影模式采用正交投影;深度測試采用最小通過,即默認模式。
14、優選地,所述步驟2包括:
15、glortho()設置正交視圖模式下的視景體,glulookat(0,0,0,1,0,0,0,0,1)設置沿x方向視口且z方向向上,glenable(gl_depth_test)開啟深度測試,gldepthfunc(gl_less)設置為最小通過的默認模式;glviewport()設置渲染的視口像素大小;glclear(1.0)清空緩存。
16、優選地,所述步驟4包括:
17、設置每一面片的顏色glcolor(color);
18、然后在glenbale(gl_triangles)模式下,通過glvertex()設置三角形面片的3個頂點。
19、優選地,所述步驟5包括:
20、在全部面片輸入完成后,通過glflush()函數觸發渲染,待渲染結束后,通過glreadpixels()讀取當前渲染結果的顏色緩存,其結果為一個與視口像素數量一致的圖像。
21、優選地,所述步驟6包括:
22、對于顏色緩存的中全體像素,進行遍歷,對于每一個像素的color解析其索引號index=r×256×256+g×256+b;
23、然后將三維模型stl文件中的第index個面片標記為可視。
24、優選地,所述步驟7包括:
25、對于三維模型進行多個視角的全體面片可視性判定計算,最后對stl文件中所有未標記的面片進行刪除,僅保留標記可視的面片,由此得到輕量化的stl文件。
26、本申請具有以下技術效果:
27、本發明不再采用傳統的三維空間模型面片的可視化計算,回避了面向面片模型的光線追蹤/求交的復雜計算邏輯設計,減小了算法開發的工作量;
28、本發明的可視化計算方法基于圖像的渲染計算,基于標準的opengl函數操作來組織,利用了gpu圖像渲染管線的內在計算邏輯完成了諸如光線跟蹤相交性計算、交點排序等,基于opengl的函數算法組織設計簡單,且易于封裝推廣應用;
29、本發明并沒有從模型面片的拓撲結構進行縮減,保持了面片的精準性,僅僅從可視性角度的進行了剔除;
30、本發明的計算本質利用了gpu的并行光柵化計算,相較于傳統的串行干涉計算計算,其計算效率更高,且算法執行魯棒性好。
1.一種基于opengl渲染可視化判定的stl模型輕量化方法,其特征在于,所述方法包括:
2.根據權利要求1所述的方法,其特征在于,所述預設規則如下:r=int(i/(256×256)),g=mod(int(i/256)/256),b=mod(i/256);其中,int()為取整,mod()為求余。
3.根據權利要求1所述的方法,其特征在于,所述步驟2包括:
4.根據權利要求1所述的方法,其特征在于,所述步驟2包括:
5.根據權利要求4所述的方法,其特征在于,所述步驟4包括:
6.根據權利要求5所述的方法,其特征在于,所述步驟5包括:
7.根據權利要求6所述的方法,其特征在于,所述步驟6包括:
8.根據權利要求7所述的方法,其特征在于,所述步驟7包括: