青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

在OpenSceneGraph中繪制OpenCascade的曲面

Posted on 2013-08-11 17:48 eryar 閱讀(11556) 評(píng)論(6)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

在OpenSceneGraph中繪制OpenCascade的曲面

Draw OpenCascade Geometry Surfaces in OpenSceneGraph

eryar@163.com

摘要Abstract:本文對(duì)OpenCascade中的幾何曲面數(shù)據(jù)進(jìn)行簡(jiǎn)要說明,并結(jié)合OpenSceneGraph將這些曲面顯示。

關(guān)鍵字Key Words:OpenCascade、OpenSceneGraph、Geometry Surface、NURBS

一、引言 Introduction

《BRep Format Description White Paper》中對(duì)OpenCascade的幾何數(shù)據(jù)結(jié)構(gòu)進(jìn)行了詳細(xì)說明。BRep文件中用到的曲面總共有11種:

1.Plane 平面;

2.Cylinder 圓柱面;

3.Cone 圓錐面;

4.Sphere 球面;

5.Torus 圓環(huán)面;

6.Linear Extrusion 線性拉伸面;

7.Revolution Surface 旋轉(zhuǎn)曲面;

8.Bezier Surface 貝塞爾面;

9.B-Spline Surface B樣條曲面;

10.Rectangle Trim Surface 矩形裁剪曲面;

11.Offset Surface 偏移曲面;

曲面的幾何數(shù)據(jù)類都有一個(gè)共同的基類Geom_Surface,類圖如下所示:

wps_clip_image-5993

Figure 1.1 Geometry Surface class diagram

抽象基類Geom_Surface有幾個(gè)純虛函數(shù)Bounds()、Value()等,可用來計(jì)算曲面上的點(diǎn)。類圖如下所示:

wps_clip_image-12898

Figure 1.2 Geom_Surface class diagram

與另一幾何內(nèi)核sgCore中的幾何的概念一致,幾何(geometry)是用參數(shù)方程對(duì)曲線曲面精確表示的。

每種曲面都對(duì)純虛函數(shù)進(jìn)行實(shí)現(xiàn),使計(jì)算曲面上點(diǎn)的方式統(tǒng)一。

曲線C(u)是單參數(shù)的矢值函數(shù),它是由直線段到三維歐幾里得空間的映射。曲面是關(guān)于兩個(gè)參數(shù)u和v的矢值函數(shù),它表示由uv平面上的二維區(qū)域R到三維歐幾里得空間的映射。把曲面表示成雙參數(shù)的形式為:

wps_clip_image-16905

它的參數(shù)方程為:

wps_clip_image-19345

u,v參數(shù)形成了一個(gè)參數(shù)平面,參數(shù)的變化區(qū)間在參數(shù)平面上構(gòu)成一個(gè)矩形區(qū)域。正常情況下,參數(shù)域內(nèi)的點(diǎn)(u,v)與曲面上的點(diǎn)r(u,v)是一一對(duì)應(yīng)的映射關(guān)系。

給定一個(gè)具體的曲面方程,稱之為給定了一個(gè)曲面的參數(shù)化。它既決定了所表示的曲面的形狀,也決定了該曲面上的點(diǎn)與其參數(shù)域內(nèi)的點(diǎn)的一種對(duì)應(yīng)關(guān)系。同樣地,曲面的參數(shù)化不是唯一的。

曲面雙參數(shù)u,v的變化范圍往往取為單位正方形,即u∈[0,1],v∈[0,1]。這樣討論曲面方程時(shí),即簡(jiǎn)單、方便,又不失一般性。

二、程序示例 Code Example

使用函數(shù)Value(u, v)根據(jù)參數(shù)計(jì)算出曲面上的點(diǎn),將點(diǎn)分u,v方向連成線,可以繪制出曲面的線框模型。程序如下所示:

 

  1 /*
  2 *    Copyright (c) 2013 eryar All Rights Reserved.
  3 *
  4 *        File    : Main.cpp
  5 *        Author  : eryar@163.com
  6 *        Date    : 2013-08-11 10:36
  7 *        Version : V1.0
  8 *
  9 *    Description : Draw OpenCascade Geometry Surfaces in OpenSceneGraph.
 10 *
 11 */
 12 
 13 // OpenSceneGraph
 14 #include <osgDB/ReadFile>
 15 #include <osgViewer/Viewer>
 16 #include <osgGA/StateSetManipulator>
 17 #include <osgViewer/ViewerEventHandlers>
 18 
 19 #pragma comment(lib, "osgd.lib")
 20 #pragma comment(lib, "osgDBd.lib")
 21 #pragma comment(lib, "osgGAd.lib")
 22 #pragma comment(lib, "osgViewerd.lib")
 23 
 24 // OpenCascade
 25 #define WNT
 26 #include <TColgp_Array2OfPnt.hxx>
 27 #include <TColStd_HArray1OfInteger.hxx>
 28 #include <TColGeom_Array2OfBezierSurface.hxx>
 29 #include <GeomConvert_CompBezierSurfacesToBSplineSurface.hxx>
 30 
 31 #include <Geom_Surface.hxx>
 32 #include <Geom_BezierSurface.hxx>
 33 #include <Geom_BSplineSurface.hxx>
 34 #include <Geom_ConicalSurface.hxx>
 35 #include <Geom_CylindricalSurface.hxx>
 36 #include <Geom_Plane.hxx>
 37 #include <Geom_ToroidalSurface.hxx>
 38 #include <Geom_SphericalSurface.hxx>
 39 
 40 #pragma comment(lib, "TKernel.lib")
 41 #pragma comment(lib, "TKMath.lib")
 42 #pragma comment(lib, "TKG3d.lib")
 43 #pragma comment(lib, "TKGeomBase.lib")
 44 
 45 // Approximation Delta.
 46 const double APPROXIMATION_DELTA = 0.1;
 47 
 48 /**
 49 * @breif Build geometry surface.
 50 */
 51 osg::Node* buildSurface(const Geom_Surface& surface)
 52 {
 53     osg::ref_ptr<osg::Geode> geode = new osg::Geode();
 54 
 55     gp_Pnt point;
 56     Standard_Real uFirst = 0.0;
 57     Standard_Real vFirst = 0.0;
 58     Standard_Real uLast = 0.0;
 59     Standard_Real vLast = 0.0;
 60 
 61     surface.Bounds(uFirst, uLast, vFirst, vLast);
 62 
 63     Precision::IsNegativeInfinite(uFirst) ? uFirst = -1.0 : uFirst;
 64     Precision::IsInfinite(uLast) ? uLast = 1.0 : uLast;
 65 
 66     Precision::IsNegativeInfinite(vFirst) ? vFirst = -1.0 : vFirst;
 67     Precision::IsInfinite(vLast) ? vLast = 1.0 : vLast;
 68 
 69     // Approximation in v direction.
 70     for (Standard_Real u = uFirst; u <= uLast; u += APPROXIMATION_DELTA)
 71     {
 72         osg::ref_ptr<osg::Geometry> linesGeom = new osg::Geometry();
 73         osg::ref_ptr<osg::Vec3Array> pointsVec = new osg::Vec3Array();
 74 
 75         for (Standard_Real v = vFirst; v <= vLast; v += APPROXIMATION_DELTA)
 76         {
 77             point = surface.Value(u, v);
 78 
 79             pointsVec->push_back(osg::Vec3(point.X(), point.Y(), point.Z()));
 80         }
 81 
 82         // Set the colors.
 83         osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
 84         colors->push_back(osg::Vec4(1.0f1.0f0.0f0.0f));
 85         linesGeom->setColorArray(colors.get());
 86         linesGeom->setColorBinding(osg::Geometry::BIND_OVERALL);
 87 
 88         // Set the normal in the same way of color.
 89         osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array;
 90         normals->push_back(osg::Vec3(0.0f-1.0f0.0f));
 91         linesGeom->setNormalArray(normals.get());
 92         linesGeom->setNormalBinding(osg::Geometry::BIND_OVERALL);
 93 
 94         // Set vertex array.
 95         linesGeom->setVertexArray(pointsVec);
 96         linesGeom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP, 0, pointsVec->size()));
 97         
 98         geode->addDrawable(linesGeom.get());
 99     }
100 
101     // Approximation in u direction.
102     for (Standard_Real v = vFirst; v <= vLast; v += APPROXIMATION_DELTA)
103     {
104         osg::ref_ptr<osg::Geometry> linesGeom = new osg::Geometry();
105         osg::ref_ptr<osg::Vec3Array> pointsVec = new osg::Vec3Array();
106 
107         for (Standard_Real u = vFirst; u <= uLast; u += APPROXIMATION_DELTA)
108         {
109             point = surface.Value(u, v);
110 
111             pointsVec->push_back(osg::Vec3(point.X(), point.Y(), point.Z()));
112         }
113 
114         // Set the colors.
115         osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
116         colors->push_back(osg::Vec4(1.0f1.0f0.0f0.0f));
117         linesGeom->setColorArray(colors.get());
118         linesGeom->setColorBinding(osg::Geometry::BIND_OVERALL);
119 
120         // Set the normal in the same way of color.
121         osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array;
122         normals->push_back(osg::Vec3(0.0f-1.0f0.0f));
123         linesGeom->setNormalArray(normals.get());
124         linesGeom->setNormalBinding(osg::Geometry::BIND_OVERALL);
125 
126         // Set vertex array.
127         linesGeom->setVertexArray(pointsVec);
128         linesGeom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP, 0, pointsVec->size()));
129         
130         geode->addDrawable(linesGeom.get());
131     }
132 
133     return geode.release();
134 }
135 
136 /**
137 * @breif Test geometry surfaces of OpenCascade.
138 */
139 osg::Node* buildScene(void)
140 {
141     osg::ref_ptr<osg::Group> root = new osg::Group();
142 
143     // Test Plane.
144     Geom_Plane plane(gp::XOY());
145     root->addChild(buildSurface(plane));
146 
147     // Test Bezier Surface and B-Spline Surface.
148     TColgp_Array2OfPnt array1(1,3,1,3);
149     TColgp_Array2OfPnt array2(1,3,1,3);
150     TColgp_Array2OfPnt array3(1,3,1,3);
151     TColgp_Array2OfPnt array4(1,3,1,3);
152 
153     array1.SetValue(1,1,gp_Pnt(1,1,1));
154     array1.SetValue(1,2,gp_Pnt(2,1,2));
155     array1.SetValue(1,3,gp_Pnt(3,1,1));
156     array1.SetValue(2,1,gp_Pnt(1,2,1));
157     array1.SetValue(2,2,gp_Pnt(2,2,2));
158     array1.SetValue(2,3,gp_Pnt(3,2,0));
159     array1.SetValue(3,1,gp_Pnt(1,3,2));
160     array1.SetValue(3,2,gp_Pnt(2,3,1));
161     array1.SetValue(3,3,gp_Pnt(3,3,0));
162 
163     array2.SetValue(1,1,gp_Pnt(3,1,1));
164     array2.SetValue(1,2,gp_Pnt(4,1,1));
165     array2.SetValue(1,3,gp_Pnt(5,1,2));
166     array2.SetValue(2,1,gp_Pnt(3,2,0));
167     array2.SetValue(2,2,gp_Pnt(4,2,1));
168     array2.SetValue(2,3,gp_Pnt(5,2,2));
169     array2.SetValue(3,1,gp_Pnt(3,3,0));
170     array2.SetValue(3,2,gp_Pnt(4,3,0));
171     array2.SetValue(3,3,gp_Pnt(5,3,1));
172 
173     array3.SetValue(1,1,gp_Pnt(1,3,2));
174     array3.SetValue(1,2,gp_Pnt(2,3,1));
175     array3.SetValue(1,3,gp_Pnt(3,3,0));
176     array3.SetValue(2,1,gp_Pnt(1,4,1));
177     array3.SetValue(2,2,gp_Pnt(2,4,0));
178     array3.SetValue(2,3,gp_Pnt(3,4,1));
179     array3.SetValue(3,1,gp_Pnt(1,5,1));
180     array3.SetValue(3,2,gp_Pnt(2,5,1));
181     array3.SetValue(3,3,gp_Pnt(3,5,2));
182 
183     array4.SetValue(1,1,gp_Pnt(3,3,0));
184     array4.SetValue(1,2,gp_Pnt(4,3,0));
185     array4.SetValue(1,3,gp_Pnt(5,3,1));
186     array4.SetValue(2,1,gp_Pnt(3,4,1));
187     array4.SetValue(2,2,gp_Pnt(4,4,1));
188     array4.SetValue(2,3,gp_Pnt(5,4,1));
189     array4.SetValue(3,1,gp_Pnt(3,5,2));
190     array4.SetValue(3,2,gp_Pnt(4,5,2));
191     array4.SetValue(3,3,gp_Pnt(5,5,1));
192 
193     Geom_BezierSurface BZ1(array1);
194     Geom_BezierSurface BZ2(array2);
195     Geom_BezierSurface BZ3(array3);
196     Geom_BezierSurface BZ4(array4);
197     root->addChild(buildSurface(BZ1));
198     root->addChild(buildSurface(BZ2));
199     root->addChild(buildSurface(BZ3));
200     root->addChild(buildSurface(BZ4));
201 
202     Handle_Geom_BezierSurface BS1 = new Geom_BezierSurface(array1);
203     Handle_Geom_BezierSurface BS2 = new Geom_BezierSurface(array2);
204     Handle_Geom_BezierSurface BS3 = new Geom_BezierSurface(array3);
205     Handle_Geom_BezierSurface BS4 = new Geom_BezierSurface(array4);
206     TColGeom_Array2OfBezierSurface bezierarray(1,2,1,2);
207     bezierarray.SetValue(1,1,BS1);
208     bezierarray.SetValue(1,2,BS2);
209     bezierarray.SetValue(2,1,BS3);
210     bezierarray.SetValue(2,2,BS4);
211 
212     GeomConvert_CompBezierSurfacesToBSplineSurface BB (bezierarray);
213 
214     if (BB.IsDone())
215     {
216         Geom_BSplineSurface BSPLSURF(
217             BB.Poles()->Array2(),
218             BB.UKnots()->Array1(),
219             BB.VKnots()->Array1(),
220             BB.UMultiplicities()->Array1(),
221             BB.VMultiplicities()->Array1(),
222             BB.UDegree(),
223             BB.VDegree() );
224 
225         BSPLSURF.Translate(gp_Vec(0,0,2));
226 
227         root->addChild(buildSurface(BSPLSURF));
228     }
229 
230     // Test Spherical Surface.
231     Geom_SphericalSurface sphericalSurface(gp::XOY(), 1.0);
232     sphericalSurface.Translate(gp_Vec(2.50.00.0));
233     root->addChild(buildSurface(sphericalSurface));
234 
235     // Test Conical Surface.
236     Geom_ConicalSurface conicalSurface(gp::XOY(), M_PI/81.0);
237     conicalSurface.Translate(gp_Vec(5.00.00.0));
238     root->addChild(buildSurface(conicalSurface));
239 
240     // Test Cylindrical Surface.
241     Geom_CylindricalSurface cylindricalSurface(gp::XOY(), 1.0);
242     cylindricalSurface.Translate(gp_Vec(8.00.00.0));
243     root->addChild(buildSurface(cylindricalSurface));
244 
245     // Test Toroidal Surface.
246     Geom_ToroidalSurface toroidalSurface(gp::XOY(), 1.00.2);
247     toroidalSurface.Translate(gp_Vec(11.00.00.0));
248     root->addChild(buildSurface(toroidalSurface));
249 
250     return root.release();
251 }
252 
253 int main(int argc, char* argv[])
254 {
255     osgViewer::Viewer myViewer;
256     
257     myViewer.setSceneData(buildScene());
258 
259     myViewer.addEventHandler(new osgGA::StateSetManipulator(myViewer.getCamera()->getOrCreateStateSet()));
260     myViewer.addEventHandler(new osgViewer::StatsHandler);
261     myViewer.addEventHandler(new osgViewer::WindowSizeHandler);
262 
263     return myViewer.run();
264 }

程序效果如下圖所示:

wps_clip_image-14066

Figure 2.1 OpenCascade Geometry Surfaces in OpenSceneGraph

三、結(jié)論 Conclusion

根據(jù)OpenCascade中的幾何曲面的函數(shù)Value(u, v)可以計(jì)算出曲面上的點(diǎn)。分u方向和v方向分別繪制曲面上的點(diǎn),并將之連接成線,即可以表示出曲面的線框模型。因?yàn)檫@樣的模型沒有面的信息,所以不能有光照效果、材質(zhì)效果等。要有光照、材質(zhì)的信息,必須將曲面進(jìn)行三角剖分。相關(guān)的剖分算法有Delaunay三角剖分等。

 

Feedback

# re: 在OpenSceneGraph中繪制OpenCascade的曲面  回復(fù)  更多評(píng)論   

2016-01-06 08:42 by robust
博主好,以上這些面都是規(guī)則的面,uv在有效范圍內(nèi)取值能夠保障點(diǎn)落在面上,可當(dāng)邊界復(fù)雜面的形狀復(fù)雜時(shí),點(diǎn)可能落在面外,比如面的形狀像條擺動(dòng)的絲帶,取uv都是0.5時(shí)獲取的點(diǎn)不在面中間,甚至在面外,這種問題博主遇到過沒有,有什么好的辦法保證uv值對(duì)應(yīng)點(diǎn)落在面內(nèi)?

# re: 在OpenSceneGraph中繪制OpenCascade的曲面  回復(fù)  更多評(píng)論   

2016-01-06 11:24 by eryar
@robust
Hello,

這個(gè)問題很好,說明你也在思考。

建議你仔細(xì)理解下“參數(shù)曲線曲面”的概念,就清楚了。

# re: 在OpenSceneGraph中繪制OpenCascade的曲面  回復(fù)  更多評(píng)論   

2016-01-06 13:29 by robust
我看過博主有關(guān)參數(shù)曲線曲面的文章,也看過一本法國(guó)人寫的b樣條曲線和曲面,可能理解不深吧,對(duì)復(fù)雜問題還是沒招,比如一個(gè)T形面,想在面中間繪制面的編號(hào),可往往繪制到面外.ANSYS也存在類似問題,只是它的編號(hào)距離面更近一些.

# re: 在OpenSceneGraph中繪制OpenCascade的曲面  回復(fù)  更多評(píng)論   

2016-01-06 20:59 by eryar
@robust
T形面?
有圖么?最好能有occ的brep模型

# re: 在OpenSceneGraph中繪制OpenCascade的曲面  回復(fù)  更多評(píng)論   

2016-07-20 09:46 by lcj
比如一個(gè)四邊形,然后再一條邊上挖出一個(gè)凹槽,這個(gè)時(shí)候生成的點(diǎn)就在凹槽里面,這種問題是怎么解決的。

# re: 在OpenSceneGraph中繪制OpenCascade的曲面  回復(fù)  更多評(píng)論   

2016-07-20 14:31 by eryar
@lcj
Hi,

你好!

有圖來說明么?

最好有occ的brep模型。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            老司机午夜免费精品视频| 国产亚洲欧美另类中文| 99re66热这里只有精品4| 美女久久网站| 亚洲高清免费在线| 欧美高清视频| 欧美激情中文字幕乱码免费| 欧美成人免费视频| 亚洲精品日韩综合观看成人91| 欧美成人一品| 欧美福利电影网| 国产精品美女黄网| 精品不卡一区| 一本色道久久综合狠狠躁的推荐| 久久精品1区| 久久视频在线看| 欧美日韩激情小视频| 国产欧美日韩| 亚洲毛片一区二区| 欧美一级电影久久| 免费观看欧美在线视频的网站| 91久久久久久久久久久久久| 亚洲精品日本| 久久精品国产999大香线蕉| 蜜臀va亚洲va欧美va天堂| 亚洲精品三级| 久久视频一区| 欧美亚洲成人免费| 亚洲国产精品www| 亚洲欧美国产毛片在线| 美女精品国产| 中文有码久久| 欧美电影免费观看| 国产综合色产在线精品| 亚洲一区黄色| 亚洲激情精品| 老鸭窝91久久精品色噜噜导演| 欧美在线亚洲一区| 欧美日产一区二区三区在线观看| 久久久久看片| 国产精品theporn| 亚洲全部视频| 欧美超级免费视 在线| 亚洲一区二区精品在线| 欧美精品www| 亚洲欧洲日本一区二区三区| 国产精品久久99| 亚洲激情中文1区| 久久久噜噜噜久久| 这里只有精品在线播放| 欧美精品福利在线| 亚洲精品国产精品国自产在线| 亚洲欧洲日韩女同| 久久免费偷拍视频| 午夜宅男欧美| 国产色婷婷国产综合在线理论片a| 欧美亚州一区二区三区| 亚洲精品影视在线观看| 免费成人小视频| 久久精品女人的天堂av| 国产一区二区三区免费不卡| 欧美伊人精品成人久久综合97| 久久国内精品自在自线400部| 99精品国产一区二区青青牛奶| 亚洲欧洲精品一区二区三区不卡 | 蜜桃久久精品乱码一区二区| 亚洲午夜电影网| 欧美性大战久久久久久久| 一区二区高清| 在线亚洲精品| 国产精品视频网址| 亚洲欧美精品| 欧美一区二区国产| 亚洲国产成人不卡| 91久久久精品| 国产精品卡一卡二卡三| 欧美一区二区视频在线观看| 午夜精品999| 激情欧美日韩| 最新亚洲一区| 国产精品外国| 另类激情亚洲| 欧美日韩精品是欧美日韩精品| 国产在线播精品第三| 久久中文字幕一区二区三区| 老司机免费视频一区二区| 一本色道久久综合亚洲精品按摩 | 欧美激情在线| 久久精品国产69国产精品亚洲| 麻豆九一精品爱看视频在线观看免费| 欧美成人综合一区| 99一区二区| 亚洲婷婷国产精品电影人久久| 久久综合九色综合欧美就去吻| 欧美精品日韩精品| 亚洲一区二区三区久久| 夜夜嗨av一区二区三区四区| 国产精品久久久久永久免费观看| 久热这里只精品99re8久| 欧美一区二区三区婷婷月色 | 中文精品视频| 亚洲一区二区三区免费观看 | 国产亚洲欧美一区二区三区| 久久夜色精品一区| 欧美日韩中文在线| 你懂的亚洲视频| 国产精品久久久久一区| 久久一日本道色综合久久| 欧美日韩亚洲一区三区 | 一本在线高清不卡dvd| 国产视频在线一区二区| 亚洲精品乱码久久久久| 国产午夜精品久久久久久久| 亚洲伦伦在线| 亚洲第一偷拍| 欧美中文字幕在线播放| 午夜电影亚洲| 欧美日韩免费观看一区二区三区 | 欧美日韩国产色综合一二三四 | 亚洲免费网址| 美女主播视频一区| 久久免费视频一区| 国产日韩精品一区| 这里只有精品电影| 中日韩美女免费视频网址在线观看| 亚洲精品1区| 在线观看一区二区视频| 欧美亚洲视频在线观看| 亚洲视频精品| 欧美久久影院| 日韩视频专区| 亚洲深夜福利网站| 欧美日韩免费观看一区| 99国产精品国产精品毛片| 亚洲精品四区| 欧美国产日韩a欧美在线观看| 亚洲视频久久| 欧美激情久久久久久| 亚洲国产裸拍裸体视频在线观看乱了| 欧美激情麻豆| 亚洲人成在线免费观看| 欧美电影美腿模特1979在线看| 久久久欧美精品| 午夜精品久久久久久99热软件| 亚洲免费在线观看视频| 亚洲欧美日韩精品一区二区| 欧美视频日韩视频在线观看| 亚洲第一区在线| 亚洲老司机av| 欧美午夜精品久久久| 亚洲视频在线看| 西瓜成人精品人成网站| 国产一区二区三区黄| 久久久久一区二区三区| 亚洲电影免费在线| 一区二区三区免费观看| 国产精品久久久久久久浪潮网站| 久久综合伊人77777麻豆| 激情文学综合丁香| 欧美精品日韩综合在线| 亚洲视频第一页| 久久综合给合久久狠狠色 | 亚洲图片自拍偷拍| 香蕉久久a毛片| 亚洲第一精品夜夜躁人人躁| 欧美激情小视频| 一区二区三区国产盗摄| 久久夜色精品国产欧美乱| 亚洲精品一区在线| 国产精品男女猛烈高潮激情| 久久精品国产一区二区三区| 亚洲国产片色| 久久成人av少妇免费| 亚洲精品九九| 韩国精品一区二区三区| 欧美日韩不卡合集视频| 久久精品成人| 亚洲一区二区高清视频| 亚洲成色精品| 久久精品国亚洲| 亚洲午夜精品网| 亚洲人成网在线播放| 国产自产精品| 国产精品久久久久av免费| 老**午夜毛片一区二区三区| 亚洲欧美精品一区| 亚洲乱码国产乱码精品精天堂| 亚洲乱码国产乱码精品精天堂 | 亚洲精品国产精品乱码不99按摩| 亚洲网站在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美视频免费| 久久夜精品va视频免费观看| 亚洲免费精彩视频| 免费国产一区二区| 久久久在线视频| 亚洲综合精品一区二区| 一本色道婷婷久久欧美| 亚洲精品国产精品国自产观看| 欧美精品国产一区|