《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于半邊結(jié)構(gòu)的STL文件快速拓?fù)渌惴?/span>
基于半邊結(jié)構(gòu)的STL文件快速拓?fù)渌惴?
2020年電子技術(shù)應(yīng)用第1期
武小超,陳 鴻
中北大學(xué) 儀器與電子學(xué)院,山西 太原030051
摘要: 針對三維模型轉(zhuǎn)換為STL文件后會丟失三角面間的拓?fù)潢P(guān)系,在對STL格式文件進(jìn)行讀取和分析時(shí),提出了一種基于半邊結(jié)構(gòu)和哈希表的快速拓?fù)渲貥?gòu)算法。在讀取數(shù)據(jù)過程中,通過哈希表建立無重復(fù)位置信息的點(diǎn)表,并在其中維護(hù)一個(gè)未添加鄰接面的半邊集合。依據(jù)該集合和拓?fù)渌惴ㄍ晟泼娴耐負(fù)潢P(guān)系,實(shí)現(xiàn)在讀取數(shù)據(jù)的過程中快速建立面的拓?fù)潢P(guān)系。
中圖分類號: TN06;P301.6
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.190962
中文引用格式: 武小超,陳鴻. 基于半邊結(jié)構(gòu)的STL文件快速拓?fù)渌惴╗J].電子技術(shù)應(yīng)用,2020,46(1):92-95,99.
英文引用格式: Wu Xiaochao,Chen Hong. Fast topology algorithm for STL files based on half-edges structure[J]. Application of Electronic Technique,2020,46(1):92-95,99.
Fast topology algorithm for STL files based on half-edges structure
Wu Xiaochao,Chen Hong
School of Instrument and Electronics,North University of China,Taiyuan 030051,China
Abstract: In order to solve the problem that the topological relationship between the triangular facets is lost when the 3D model is converted to STL files,in the process of reading and analyzing STL files, a fast topology reconstruction algorithm based on half-edges structure and hash table is proposed. In the process of reading data, a point table without repeat position information is established through a hash table, and a collection containing half-edges in which no adjacency facets are added is maintained therein. According to the set and topology algorithm, the topological relationship of the facets is improved, and the topological relationship of the facets is quickly established in the process of reading data.
Key words : STL file;half-edges structure;hash table;topology algorithm

0 引言

    自3D打印技術(shù)問世之后,憑借其復(fù)雜性低、成本低廉、軟件開源、易于推廣等特點(diǎn)在國內(nèi)外得到了迅速的發(fā)展[1]。STL(Stereo Lithography)文件是由美國3D System公司于1987年制定的接口協(xié)議,由于其格式簡單、讀寫便利,成為3D打印過程中最常用的數(shù)據(jù)存儲格式[2]STL文件由離散的三角面片組成,存放了模型的點(diǎn)云的位置信息和三角面片的法向量,但其丟失了面與面之間的拓?fù)潢P(guān)系,同時(shí),單個(gè)點(diǎn)被多次記錄,造成了大量的數(shù)據(jù)冗余[3]。在快速成型過程中,待支撐位置查詢、模型分層切片等操作均需要三角面間的拓?fù)潢P(guān)系[4],因此,建立合理的數(shù)據(jù)結(jié)構(gòu)剔除冗余信息,采用高效的算法建立拓?fù)潢P(guān)系就顯得尤為重要。

    針對STL文件讀寫的局限,國內(nèi)外專家提出多種解決方案。侯聰聰?shù)?sup>[5]提出基于鏈表的數(shù)據(jù)存儲和拓?fù)浣Y(jié)構(gòu),建立點(diǎn)、邊、面表進(jìn)行數(shù)據(jù)存儲,雖剔除了STL文件中的重復(fù)點(diǎn),但每次建立拓?fù)潢P(guān)系時(shí),均對整個(gè)邊表進(jìn)行遍歷,算法性能較低;王增波[6]采用哈希表作為基礎(chǔ)結(jié)構(gòu),將有效數(shù)據(jù)僅保存一次,提升了數(shù)據(jù)的添加和查找速度,幾乎可以在常數(shù)時(shí)間內(nèi)快速完成,但建立拓?fù)潢P(guān)系時(shí),依舊是對已存數(shù)據(jù)進(jìn)行遍歷,不僅效率較低,還存在部分?jǐn)?shù)據(jù)查找遺漏的現(xiàn)象;王彥云等[7]優(yōu)化了哈希表的沖突解決方案,采用二分查找的方法對相同key值的鏈表進(jìn)行查找,提升了查表速度,但拓?fù)渌惴?/a>效率依舊較低;錢乘等[8]也采用哈希表進(jìn)行數(shù)據(jù)存儲,存儲數(shù)據(jù)的同時(shí)對每個(gè)點(diǎn)記錄其所屬三角面片,全部存儲完畢后,再對所有面片進(jìn)行遍歷,建立拓?fù)潢P(guān)系,不存在遺漏,但讀取完成后,需要再次遍歷面表尋找鄰接面;張應(yīng)中等[9]利用半邊結(jié)構(gòu)進(jìn)行拓?fù)潢P(guān)系建立,巧妙地將點(diǎn)與面的信息存入邊,利用三角面中頂點(diǎn)的存放順序來保存邊的信息,精簡了存儲結(jié)構(gòu),但拓?fù)渌惴◤?fù)雜,并且需要在讀入全部頂點(diǎn)的情況下建立拓?fù)潢P(guān)系。

    基于以上算法的研究,本文提出一種基于哈希表的、利用半邊結(jié)構(gòu)的數(shù)據(jù)存儲和三角面拓?fù)渌惴ǎ谧x取數(shù)據(jù)過程中,一方面剔除冗余數(shù)據(jù),一方面快速建立面的拓?fù)潢P(guān)系,每讀入一個(gè)三角面信息,進(jìn)行數(shù)據(jù)存放的同時(shí),在點(diǎn)表中維護(hù)一個(gè)未添加鄰接面的半邊集合。當(dāng)數(shù)據(jù)讀取完成后,建立無重復(fù)數(shù)據(jù)的點(diǎn)表和面表,完善三角面間的拓?fù)潢P(guān)系。

1 STL文件

    STL格式文件分為ASCII碼和二進(jìn)制兩種,其中,二進(jìn)制格式的文件數(shù)據(jù)結(jié)構(gòu)如圖1所示,與ASCII相比存儲更加緊湊,占用空間較小,會在文件起始位置記錄三角面片總數(shù)Num,在后續(xù)建立哈希表時(shí)也能依據(jù)此選擇更加合適的表長。

jsj1-t1.gif

    由歐拉公式可知,存儲正確的三角網(wǎng)格文件,三角面的數(shù)量約為頂點(diǎn)的2倍[10],而在STL文件中,每存儲一次面片信息,都會重復(fù)存儲3個(gè)點(diǎn)的位置坐標(biāo),使得存的儲頂點(diǎn)數(shù)量是面片數(shù)量的3倍[11]。由此可得,每個(gè)頂點(diǎn)在STL文件中平均記錄了6次,所以在進(jìn)行拓?fù)潢P(guān)系建立前,需要先對冗余信息進(jìn)行辨別和剔除,使每個(gè)頂點(diǎn)僅存儲一次,減少數(shù)據(jù)存儲量,提升算法效率。

2 采用半邊結(jié)構(gòu)的拓?fù)鋽?shù)據(jù)結(jié)構(gòu)

2.1 半邊的二元組表示

    本文采用文獻(xiàn)[9]提出的精簡半邊結(jié)構(gòu)作為基礎(chǔ),使用三角面的標(biāo)志和半邊在面中的序號來表示半邊。如圖2所示,頂點(diǎn)A、B、C、A按照逆時(shí)針順序連線構(gòu)成面M1;頂點(diǎn)D、A、C、D連線構(gòu)成面M2,半邊L2可以表示為[M1,2],即M1面中的第2條半邊,半邊L6可以表示為[M2,3],即M2面中的第3條半邊。

jsj1-t2.gif

    當(dāng)兩個(gè)半邊頂點(diǎn)相同且邊的起點(diǎn)與終點(diǎn)相互調(diào)換時(shí),兩半邊互為反向半邊,這時(shí),兩半邊所屬三角面互為鄰接面。如圖2所示,L3和L5為反向半邊,M1與M2為鄰接三角面。使用二元法表示半邊可以精簡高效地建立點(diǎn)、邊、面的關(guān)系,當(dāng)兩半邊為反向半邊時(shí),可立即得到該半邊所在面,從而建立面的拓?fù)潢P(guān)系。

2.2 拓?fù)鋽?shù)據(jù)結(jié)構(gòu)

    基于STL文件的特點(diǎn)和半邊二元組的表示,綜合考慮空間和效率需求,本文提出如下的基于半邊結(jié)構(gòu)的三角面拓?fù)鋽?shù)據(jù)結(jié)構(gòu)。如圖3所示,STL文件的幾何信息通過頂點(diǎn)和三角面描述,半邊信息定義在頂點(diǎn)類中,使用鍵值對存入Map容器中;臨接面信息通過在三角面類中定義一個(gè)包含3個(gè)元素的數(shù)組對其進(jìn)行存儲。

jsj1-t3.gif

    (1)頂點(diǎn)類(Class Vertex)。頂點(diǎn)數(shù)據(jù)包括頂點(diǎn)位置坐標(biāo)和一個(gè)用來存儲半邊信息的Map容器。該Map容器以紅黑樹為底層,存放以該頂點(diǎn)為起點(diǎn)的半邊,半邊信息通過將上文中的二元組轉(zhuǎn)化為鍵值對進(jìn)行存儲。使用紅黑樹作為底層數(shù)據(jù)結(jié)構(gòu),可以避免使用連續(xù)內(nèi)存,并將以該點(diǎn)為起點(diǎn)的半邊信息全部保存,其搜索時(shí)間復(fù)雜度為O(lgn),在增加刪除半邊時(shí),不會對頂點(diǎn)存放的Hash表產(chǎn)生額外影響,同時(shí)仍具有較快的速度。

    (2)三角面類(Class Mesh)。面數(shù)據(jù)包含3個(gè)指向頂點(diǎn)的指針, 采用一維數(shù)組存放,指針存儲順序同時(shí)隱性包含了半邊順序,即:頂點(diǎn)V1與V2形成序號為1的半邊,頂點(diǎn)V2與V3形成序號為2的半邊,頂點(diǎn)V3與V1形成序號為3的半邊;此外,將法向量坐標(biāo)存入normal_vector數(shù)組,面片的3個(gè)臨接面存入border_meshs數(shù)組。

2.3 點(diǎn)表和面表

    存儲頂點(diǎn)數(shù)據(jù)時(shí),需要快速判斷該頂點(diǎn)是否已經(jīng)保存,鑒于哈希表查找時(shí)較低的時(shí)間復(fù)雜度,采用哈希表對頂點(diǎn)數(shù)據(jù)進(jìn)行保存。本文哈希函數(shù)如下:

     jsj1-gs1-2.gif

其中,x、y、z為頂點(diǎn)坐標(biāo)的3個(gè)分量值,m為哈希表的長度,h(k)為計(jì)算出的哈希地址。由于STL文件數(shù)據(jù)精度較高,使得各點(diǎn)的值較為接近,因此對k進(jìn)行一定程度放大。STL文件滿足歐拉關(guān)系,即三角網(wǎng)格模型的頂點(diǎn)總數(shù)是其總?cè)敲嫫瑪?shù)的1/2,所以m取值為與Num/2最接近的素?cái)?shù),以減少散列地址的沖突。存儲頂點(diǎn)的哈希表如圖4所示。

jsj1-t4.gif

    因?yàn)槊鏀?shù)據(jù)不存在重復(fù),所以直接使用面對象數(shù)組作為面表,一方面可以在O(1)的時(shí)間復(fù)雜度內(nèi)找到對應(yīng)面片,修改面片信息;另一方面,將數(shù)組的下標(biāo)加1,便可作為面片的標(biāo)志,可以快速定位半邊位置。

3 STL文件拓?fù)湫畔⒅亟鞒?/strong>

3.1 冗余信息剔除

    當(dāng)開始進(jìn)行STL文件讀取后,會依次讀入所有三角面片的頂點(diǎn)和法向量信息,法向量信息待3個(gè)點(diǎn)均讀入后存入面對象,將頂點(diǎn)的3個(gè)坐標(biāo)帶入式(1)、式(2),計(jì)算得到哈希地址,即該點(diǎn)存入點(diǎn)表的位置,而后分為以下兩種情況:

    (1)若該地址內(nèi)沒有數(shù)據(jù),說明該點(diǎn)首次出現(xiàn),依據(jù)該點(diǎn)所在的三角面片的序號和點(diǎn)在面中的位置構(gòu)建半邊,并將其以鍵值對的形式存入點(diǎn)的half-edges,便完成新點(diǎn)添加。例如,依次讀入第4個(gè)面片的3個(gè)頂點(diǎn)V1、V2、V3,由于V2是第2個(gè)讀入的點(diǎn),則構(gòu)建二元組為[4,2],即第4個(gè)面片中的第2個(gè)半邊,半邊方向由V2指向V3

    (2)若該地址存在數(shù)據(jù),由于不相同的兩點(diǎn)也可能計(jì)算出相同的哈希地址,因此需要對比新添加的頂點(diǎn)坐標(biāo)和已存頂點(diǎn)的坐標(biāo)是否相同。若相同,則說明該點(diǎn)為重復(fù)的舊點(diǎn),不需要進(jìn)行添加,進(jìn)行下一個(gè)點(diǎn)的處理;若不同,則該點(diǎn)為新點(diǎn),同樣構(gòu)建并添加半邊信息后,鏈?zhǔn)教砑狱c(diǎn)解決沖突。例如:讀入新點(diǎn)V1,計(jì)算得到哈希地址為2,但發(fā)現(xiàn)該地址已經(jīng)存在頂點(diǎn)數(shù)據(jù)且與V1不同,則需要在該地址處添加指向新點(diǎn)的指針,形成鏈表來解決哈希地址沖突。

3.2 添加三角面并生成拓?fù)湫畔?/strong>

    依次讀取并存儲3個(gè)頂點(diǎn)信息后,依據(jù)讀取的三角面的序號,更新面表內(nèi)所對應(yīng)面的頂點(diǎn)和法向量信息,即vertex數(shù)組和 normal_vector數(shù)組。第一個(gè)面片讀取完成后,點(diǎn)表中的半邊信息如圖5所示,點(diǎn)A、B、C所存半邊信息依次為[1,1]、[1,2]、[1,3],即AB、BC、CA半邊,此時(shí)border_meshs數(shù)組內(nèi)暫無鄰接面信息。

jsj1-t5.gif

    后續(xù)繼續(xù)添加面片信息時(shí)存在多種情況,以下分別討論:

    (1)新面片的3個(gè)頂點(diǎn)與現(xiàn)存頂點(diǎn)均不相同。即3頂點(diǎn)均為第一次讀取,構(gòu)建面數(shù)據(jù)并將其加入面表后,半邊信息如圖6所示,其中(A,B,C)為已存面,(D,E,F(xiàn))為新添加面,所有點(diǎn)目前僅保存一個(gè)半邊,所有面不存在鄰接面。

jsj1-t6.gif

    (2)新面片的3個(gè)頂點(diǎn)與現(xiàn)存頂點(diǎn)有一個(gè)相同,構(gòu)建面數(shù)據(jù)并將其加入面表后,半邊信息如圖7(a)所示,其中(A,B,C)為已存面,(D,C,E)為新添加面,由于點(diǎn)C不是首次讀取,因此點(diǎn)中已經(jīng)存有指向點(diǎn)A的半邊,需將C指向點(diǎn)E的半邊也存入其中,即構(gòu)建[2,2]半邊存入點(diǎn)C的half-edges,此時(shí)點(diǎn)C中存有兩個(gè)半邊信息,添加后的半邊信息如圖7(b)所示。此時(shí)點(diǎn)C中存有兩個(gè)半邊信息,兩個(gè)已存面均無鄰接面信息。

jsj1-t7.gif

    (3)新面片的3個(gè)頂點(diǎn)與現(xiàn)存頂點(diǎn)有兩個(gè)相同,此時(shí)又可分為兩種情況,新添加面均為(D,A,C)。①情況1如圖8(a)所示,A、C兩點(diǎn)為已存點(diǎn),由于C點(diǎn)已存半邊CE與AC半邊不是反向半邊,因此兩面不是鄰接面,構(gòu)建AC、CD兩半邊分別存入點(diǎn)A、C中即可,此時(shí)A、C、E 3點(diǎn)均存有兩個(gè)半邊信息;②情況2如圖8(b)所示,A、C兩點(diǎn)為已存點(diǎn),由于C點(diǎn)包含指向A點(diǎn)的半邊CA,與新添加面中的AC半邊互為反向半邊,說明兩三角面互為鄰接面,向面(A,B,C)的border_meshs數(shù)組中添加序號2,向面(D,A,C)的border_meshs數(shù)組中添加半邊CA所在面序號1,而后刪除點(diǎn)C中的半邊CA并添加半邊CD,即half-edges刪除[1,3],添加[2,3],便完成了新面的添加和拓?fù)潢P(guān)系的建立,此時(shí)兩面均存在一個(gè)鄰接面,所有點(diǎn)均包含一個(gè)半邊。

jsj1-t8.gif

    (4)新面片的3個(gè)頂點(diǎn)與現(xiàn)存頂點(diǎn)均相同,此時(shí)又可以又可分為4種情況,新加入的面均為(D,A,C)。①情況1如圖9(a)所示,不存在新的鄰接邊,將D、A、C 3點(diǎn)均添加新的半邊即可;②情況2如圖9(b)所示,有一條新的鄰接邊,添加DA、CD半邊,刪除CA半邊,并在兩面中添加鄰接面即可;③情況3如圖9(c)所示,有兩條新的鄰接邊,添加DA半邊,將CA、DC半邊刪除,并完善鄰接面信息;④情況4如圖9(d)所示,3條邊均為新的鄰接邊,將AD、DC、CA半邊刪除,完善面的鄰接信息后即完成面的添加和鄰接拓?fù)湫畔?gòu)建。

jsj1-t9.gif

    綜上,面片的添加與拓補(bǔ)過程與重合點(diǎn)數(shù)量相關(guān)需分情況討論。若不存在舊點(diǎn),則默認(rèn)構(gòu)建即可;若存在一個(gè),給該點(diǎn)添加新的半邊;若存在兩個(gè)以上,3點(diǎn)按讀入順序,每兩點(diǎn)組成一個(gè)新半邊,依次判斷3個(gè)半邊的半邊,即是否存在新的鄰接面。若不存在,則為半邊的起點(diǎn)添加新半邊;若存在,則在面表內(nèi)添加新的鄰接面,并刪除起點(diǎn)的原有半邊。注意,若3點(diǎn)中僅有兩點(diǎn)為已存點(diǎn),則需要為刪除半邊的點(diǎn)添加新的、基于新添加面片的半邊(如圖8(b)所示)。整個(gè)拓?fù)淞鞒倘鐖D10所示。

jsj1-t10.gif

4 測試實(shí)例及性能分析

    將上述數(shù)據(jù)結(jié)構(gòu)和快速拓?fù)渌惴ㄍㄟ^OpenGL和Qt Creator編程實(shí)現(xiàn),同時(shí),使用文獻(xiàn)[8]中的拓?fù)渌惴ㄅc本文的算法對5個(gè)STL模型進(jìn)行拓?fù)渲亟▽?shí)驗(yàn),實(shí)驗(yàn)環(huán)境為Windows 10操作系統(tǒng),處理器主頻為2.6 GHz,4.0 GB內(nèi)存,獲得同一個(gè)STL模型在兩種算法下的拓?fù)潢P(guān)系構(gòu)建時(shí)間。表1為兩種算法運(yùn)行時(shí)間對比。

jsj1-b1.gif

    由于本文算法在進(jìn)行STL文件存儲的同時(shí)便完成了面片拓?fù)潢P(guān)系的建立,相比于文獻(xiàn)[8]的算法,不需要存儲數(shù)據(jù)后再對面表遍歷并進(jìn)行大量比對尋找鄰接面,節(jié)省了大量的時(shí)間,從測試結(jié)果中也可看出本算法具有更高的效率。

5 結(jié)論

    本文提出半邊結(jié)構(gòu)的快速拓?fù)渌惴ǎ瑢脒呅畔⒁枣I值對的形式存入點(diǎn)中,每讀入一個(gè)面片,存儲數(shù)據(jù)的同時(shí),以較快的效率更新未添加鄰接面的半邊集合和面表中的鄰接面數(shù)組,STL模型讀取完畢后,面的拓?fù)湫畔⒁餐瑫r(shí)完善,有效縮短了面片拓?fù)潢P(guān)系建立的時(shí)間,為模型后續(xù)的支撐添加和切片處理帶來了極大的便利。

參考文獻(xiàn)

[1] 宋廷強(qiáng),邢照合.一種彩色FDM型3D打印機(jī)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2017,43(4):69-71,75.

[2] 楊晟院,陳瑤,易飛,等.基于2維流形的STL曲面網(wǎng)格重建算法[J].軟件學(xué)報(bào),2017,28(12):3358-3366.

[3] 王彥云,陳鴻,謝明師,等.FDM快速成型支撐結(jié)構(gòu)自動生成算法的研究[J].電子技術(shù)應(yīng)用,2015,41(8):146-148.

[4] 徐敬華,盛紅升,張樹有,等.基于鄰接拓?fù)涞牧餍尉W(wǎng)格模型層切多連通域構(gòu)建方法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2018,30(1):180-190.

[5] 侯聰聰,南琳,張磊.基于分組的STL模型快速切片算法[J].制造業(yè)自動化,2014,36(9):12-15.

[6] 王增波.STL格式文件的快速拓?fù)渲亟ㄋ惴╗J].計(jì)算機(jī)應(yīng)用,2014,34(9):2720-2724.

[7] 王彥云,陳鴻,謝明師,等.基于哈希表的STL格式文件拓?fù)渲亟ǖ乃惴╗J].現(xiàn)代制造工程,2015(12):61-64.

[8] 錢乘,李震,江本赤,等.基于哈希表的STL文件拓?fù)潢P(guān)系快速重建算法[J].新鄉(xiāng)學(xué)院學(xué)報(bào),2018,35(6):36-39,51.

[9] 張應(yīng)中,謝馥香,羅曉芳,等.采用半邊編碼的三角網(wǎng)格拓?fù)鋽?shù)據(jù)結(jié)構(gòu)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2016,28(2):328-334.

[10] BOTSCH M,KOBBELT L,PAULY M,et al.Polygon mesh processing[M].Natick:A K Peters,2010:1-2.

[11] 謝馥香.面向三角網(wǎng)格分割體的設(shè)計(jì)特征重構(gòu)[D].大連:大連理工大學(xué),2015.




作者信息:

武小超,陳  鴻

(中北大學(xué) 儀器與電子學(xué)院,山西 太原030051)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
在线一区欧美| 亚洲免费影院| 亚洲午夜影视影院在线观看| 亚洲片在线观看| 亚洲高清不卡| 在线成人激情视频| 亚洲大片精品永久免费| 亚洲成人原创| 亚洲国产精品嫩草影院| 亚洲国产欧美一区二区三区同亚洲 | 在线免费观看视频一区| 精品51国产黑色丝袜高跟鞋| 国产亚洲精品成人av久久ww| 国产日韩欧美自拍| 国产亚洲欧美中文| 国内精品久久久久影院薰衣草| 国产亚洲欧美一区在线观看| 国内一区二区三区| 一区二区在线视频| 亚洲国产精品一区二区www| 亚洲第一精品福利| 亚洲激精日韩激精欧美精品| 亚洲精品免费在线| 99re66热这里只有精品4| 一区二区三区精品| 老鸭窝91久久精品色噜噜导演| 国内成人自拍视频| 国产综合精品一区| 国产精品男gay被猛男狂揉视频| 欧美日韩国产影院| 欧美午夜免费影院| 国产精品亚洲综合天堂夜夜| 国产一区二区三区在线播放免费观看| 国产亚洲一区二区精品| 在线精品一区| 99这里只有精品| 亚洲无线视频| 欧美一级电影久久| 亚洲电影第三页| 亚洲美女91| 亚洲一区在线播放| 久久精品人人做人人爽| 欧美mv日韩mv国产网站| 欧美日韩在线播| 国产日韩精品在线| 亚洲国产老妈| 中文在线资源观看网站视频免费不卡 | 免费成人黄色片| 欧美日韩免费视频| 国产精品中文字幕欧美| 好看的日韩视频| 亚洲精品久久在线| 亚洲自拍偷拍福利| 亚洲精品123区| 亚洲午夜久久久| 久久久久久9| 欧美日韩国产免费| 国产一区二区三区久久精品| 亚洲精品在线一区二区| 欧美一区二区在线免费播放| 亚洲精品一区二区三区在线观看| 亚洲免费在线精品一区| 蜜臀av国产精品久久久久| 欧美色大人视频| 激情成人亚洲| 亚洲一区精彩视频| 亚洲精品国产精品国自产观看浪潮| 亚洲小说春色综合另类电影| 久久久噜噜噜久久| 欧美午夜一区二区| 亚洲第一在线| 亚洲欧美日韩国产综合在线| 亚洲精品小视频| 久久久精品性| 欧美性久久久| 91久久久一线二线三线品牌| 亚欧成人精品| 亚洲男人的天堂在线aⅴ视频| 免费人成精品欧美精品| 国产乱码精品一区二区三区五月婷| 亚洲国产色一区| 欧美制服丝袜第一页| 亚洲综合国产| 欧美激情bt| 狠狠色丁香久久婷婷综合丁香| 一区二区三区日韩精品视频| 亚洲精品乱码视频| 久久乐国产精品| 国产女人水真多18毛片18精品视频| 亚洲精品一区二区三区四区高清| 亚洲电影免费在线观看| 欧美在线在线| 国产精品国产三级国产普通话蜜臀| 亚洲高清自拍| 亚洲二区在线视频| 久久精品91久久久久久再现| 欧美性大战久久久久| 亚洲精品123区| 91久久久亚洲精品| 久久夜色撩人精品| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 99精品久久久| 牛牛影视久久网| 国产亚洲人成网站在线观看| 亚洲一区免费在线观看| 在线亚洲欧美视频| 欧美精品免费播放| 亚洲国内精品| 亚洲精品欧美日韩| 老司机精品福利视频| 国产一区二区0| 午夜亚洲影视| 欧美在线视频观看| 国产嫩草影院久久久久| 亚洲欧美日本视频在线观看| 亚洲午夜高清视频| 欧美午夜免费| 亚洲一区999| 午夜欧美大尺度福利影院在线看| 国产精品久久久久久久久果冻传媒 | 中文精品视频一区二区在线观看| 99re这里只有精品6| 欧美—级高清免费播放| 亚洲精品1区| 一区二区三区四区国产精品| 欧美日产国产成人免费图片| 91久久精品一区| 亚洲美女av电影| 欧美日韩免费高清一区色橹橹| 亚洲六月丁香色婷婷综合久久| 正在播放亚洲一区| 国产精品jizz在线观看美国| 亚洲手机在线| 亚洲欧美日韩电影| 国产日产精品一区二区三区四区的观看方式 | 99成人在线| 欧美日韩亚洲国产精品| 一本色道久久综合狠狠躁篇的优点| 亚洲线精品一区二区三区八戒| 国产精品va在线播放我和闺蜜| 亚洲一区3d动漫同人无遮挡| 欧美在线播放高清精品| 好吊一区二区三区| 亚洲伦伦在线| 欧美体内谢she精2性欧美| 亚洲主播在线| 久久亚洲美女| 亚洲精品国产精品乱码不99 | 一区二区免费在线视频| 欧美亚洲专区| 国户精品久久久久久久久久久不卡| 亚洲国产精品99久久久久久久久| 欧美—级a级欧美特级ar全黄| 亚洲视频电影图片偷拍一区| 久久精品国产精品亚洲综合 | 午夜视频在线观看一区二区三区 | 亚洲一区欧美二区| 久久久噜噜噜久久中文字免 | 一区二区激情视频| 欧美一级淫片播放口| 国语自产精品视频在线看8查询8 | 欧美日韩三级| 午夜精品免费| 欧美高清成人| 亚洲少妇在线| 久久婷婷亚洲| 在线亚洲高清视频| 久久人体大胆视频| 一区二区精品国产| 久久亚洲二区| 一本色道久久88亚洲综合88| 久久久亚洲国产天美传媒修理工| 亚洲人永久免费| 久久国产日韩欧美| 亚洲三级视频| 久久久久成人网| 一区二区三区精品国产| 久久综合五月| 亚洲在线视频网站| 欧美日韩国产色综合一二三四 | 亚洲精品久久| 国产女同一区二区| aa级大片欧美三级| 韩国三级电影一区二区| 亚洲一区bb| 亚洲风情亚aⅴ在线发布| 欧美一区二区三区视频| 亚洲精品影院| 噜噜噜91成人网| 亚洲自拍偷拍色片视频| 欧美精彩视频一区二区三区| 性做久久久久久久免费看| 欧美三级网址| 亚洲欧洲日产国产综合网| 国产欧美在线看| 亚洲无线一线二线三线区别av| 在线日韩av永久免费观看| 欧美在线在线| 国产精品99久久久久久白浆小说| 欧美精品色综合|