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

隨筆 - 505  文章 - 1034  trackbacks - 0
<2010年2月>
31123456
78910111213
14151617181920
21222324252627
28123456
78910111213


子曾經曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 918815
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

 《實時計算機圖形學(第二版)》         3.5.2 透視投影  P36
 《Real-time Rendering,Second Edition》 3.5.2 Perspective Projection     P61


如何證明qy=-dpy/pz,即證明qy/py=-d/pz ? 畫出下面的圖來就清清楚楚了,相似三角形
 
在photoshop中畫的,虛線是先畫的直線然后用橡皮間隔擦掉,汗??!有沒有簡單的辦法?


將錐體變換為單位立方體的透視變換矩陣,書上直接給出了式(3.68)表示:

(此圖是從電子版的書上截圖下來的)

(此圖是用word的公式編輯器編輯的,哇咔咔,好用啊!插入->對象->新建->Microsoft 公式 3.0)

如何推導出來的呢?
見丁歐南同學高一時寫的《
Introduction to Perspective Projection
看不懂的時候看下其Reference中的這個

Perspective-Correct Interpolation  [Kok-Lim Low]

這個英文的更好理解 ^_^

還可以看下
 《實時計算機圖形學(第二版)》         15.2 透視校正插值  P381 
 《Real-time Rendering,Second Edition》  15.2 Perspective-Correct Interpolation       P680

 《3D數學基礎:圖形與游戲開發》         15.3 坐標空間  P326 
 《3D Math Primer for Graphics and Game Development》  15.3 Coordinate Spaces  P354

2008-12-16 22:17  花了兩天時間看完了這些東西,畫滿了三張草紙的正反面,好久違的感覺??!但是依然對透視投影很困惑

2009-01-20  《Fundamentals of Computer Graphics》第七章 觀察 這里有比較詳細的推導
2010-07-05
http://www.opengpu.org/bbs/viewthread.php?tid=2561&extra=page%3D1%26amp;filter%3Ddigest

2012-11-28
上面的鏈接已經失效,去這里下載吧 
http://ishare.iask.sina.com.cn/f/9838742.html
忍不住把所有的圖片鏈接全部更新了?。。?br /> 在項目這么忙的時刻?。。?br /> 以后不斷把閱讀的體會理解都加上!

2015-07-09 

今天終于把下面的推導都看完了,也計算了一遍。
真的不難哈,相似三角形、三角函數、齊次坐標、矩陣,就這些而已!木有微積分和概率!

總結:時間跨度好大啊,從08年底到15年中,將近7年過去了!從26歲的青春小伙兒變成了33歲的中年大叔!空間上跨度也挺大,從上海跑到了新加坡 :) 哈哈,但不變的是一顆求知的心!
========================

透視投影(Perspective Projection)變換推導




透視投影是3D固定流水線的重要組成部分,是將相機空間中的點從視錐體(frustum)變換到規則觀察體(Canonical View Volume)中,待裁剪完畢后進行透視除法的行為。在算法中它是通過透視矩陣乘法和透視除法兩步完成的。


透視投影變換是令很多剛剛進入3D圖形領域的開發人員感到迷惑乃至神秘的一個圖形技術。其中的理解困難在于步驟繁瑣,對一些基礎知識過分依賴,一旦對它們中的任何地方感到陌生,立刻導致理解停止不前。

沒錯,主流的3D APIs如OpenGL、D3D的確把具體的透視投影細節封裝起來,比如

gluPerspective(…) 就可以根據輸入生成一個透視投影矩陣。而且在大多數情況下不需要了解具體的內幕算法也可以完成任務。但是你不覺得,如果想要成為一個職業的圖形程序員或游戲開發者,就應該真正降伏透視投影這個家伙么?我們先從必需的基礎知識著手,一步一步深入下去(這些知識在很多地方可以單獨找到,但我從來沒有在同一個地方全部找到,但是你現在找到了)。

我們首先介紹兩個必須掌握的知識。有了它們,我們才不至于在理解透視投影變換的過程中迷失方向(這里會使用到向量幾何、矩陣的部分知識,如果你對此不是很熟悉,可以參考



可以找到一組坐標(v1,v2,v3),使得

v = v1 a + v2 b + v3 c (1)

而對于一個點p,則可以找到一組坐標(p1,p2,p3),使得

p – o = p1 a + p2 b + p3 c (2)

從上面對向量和點的表達,我們可以看出為了在坐標系中表示一個點(如p),我們把點的位置看作是對這個基的原點o所進行的一個位移,即一個向量——p – o(有的書中把這樣的向量叫做位置向量——起始于坐標原點的特殊向量),我們在表達這個向量的同時用等價的方式表達出了點p:

p = o + p1 a + p2 b + p3 c (3)

(1)(3)是坐標系下表達一個向量和點的不同表達方式。這里可以看出,雖然都是用代數分量的形式表達向量和點,但表達一個點比一個向量需要額外的信息。如果我寫出一個代數分量表達(1, 4, 7),誰知道它是個向量還是個點!

我們現在把(1)(3)寫成矩陣的形式:



這里(a,b,c,o)是坐標基矩陣,右邊的列向量分別是向量v和點p在基下的坐標。這樣,向量和點在同一個基下就有了不同的表達:3D向量的第4個代數分量是0,而3D點的第4個代數分量是1。像這種這種用4個代數分量表示3D幾何概念的方式是一種齊次坐標表示。

“齊次坐標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用于進行仿射(線性)幾何變換。”—— F.S. Hill, JR
這樣,上面的(1, 4, 7)如果寫成(1,4,7,0),它就是個向量;如果是(1,4,7,1),它就是個點。

下面是如何在普通坐標 (Ordinary Coordinate)和齊次坐標(Homogeneous Coordinate)之間進行轉換:

從普通坐標轉換成齊次坐標時,

如果(x,y,z)是個點,則變為(x,y,z,1);

如果(x,y,z)是個向量,則變為 (x,y,z,0)

從齊次坐標轉換成普通坐標時,

如果是(x,y,z,1),則知道它是個點,變成(x,y,z);

如果是(x,y,z,0),則知道它是個向量,仍然變成(x,y,z)

以上是通過齊次坐標來區分向量和點的方式。從中可以思考得知,對于平移T、旋轉R、縮放S這3個最常見的仿射變換,平移變換只對于點才有意義,因為普通向量沒有位置概念,只有大小和方向,這可以通過下面的式子清楚地看出:



  而旋轉和縮放對于向量和點都有意義,你可以用類似上面齊次表示來檢測。從中可以看出,齊次坐標用于仿射變換非常方便。

此外,對于一個普通坐標的點P=(Px, Py, Pz),有對應的一族齊次坐標(wPx, wPy, wPz, w),其中w不等于零。比如,P(1, 4, 7)的齊次坐標有(1, 4, 7, 1)、(2, 8, 14, 2)、(-0.1, -0.4, -0.7, -0.1)等等。因此,如果把一個點從普通坐標變成齊次坐標,給x,y,z乘上同一個非零數w,然后增加第4個分量w;如果把一個齊次坐標轉換成普通坐標,把前三個坐標同時除以第4個坐標,然后去掉第4個分量。

由于齊次坐標使用了4個分量來表達3D概念,使得平移變換可以使用矩陣進行,從而如F.S. Hill, JR所說,仿射(線性)變換的進行更加方便。由于圖形硬件已經普遍地支持齊次坐標與矩陣乘法,因此更加促進了齊次坐標使用,使得它似乎成為圖形學中的一個標準。


簡單的線性插值

這是在圖形學中普遍使用的基本技巧,我們在很多地方都會用到,比如2D位圖的放大、縮小,Tweening變換,以及我們即將看到的透視投影變換等等?;舅枷胧牵航o一個x屬于[a, b],找到y屬于[c, d],使得x與a的距離比上ab長度所得到的比例,等于y與c的距離比上cd長度所得到的比例,用數學表達式描述很容易理解:



這樣,從a到b的每一個點都與c到d上的唯一一個點對應。有一個x,就可以求得一個y。

此外,如果x不在[a, b]內,比如x < a或者x > b,則得到的y也是符合y < c或者y > d,比例仍然不變,插值同樣適用。



透視投影變換

好,有了上面兩個理論知識,我們開始分析這次的主角——透視投影變換。這里我們選擇OpenGL的透視投影變換進行分析,其他的 APIs會存在一些差異,但主體思想是相似的,可以類似地推導。經過相機矩陣的變換,頂點被變換到了相機空間。這個時候的多邊形也許會被視錐體裁剪,但在這個不規則的體中進行裁剪并非那么容易的事情,所以經過圖形學前輩們的精心分析,裁剪被安排到規則觀察體(Canonical View Volume, CVV)中進行,CVV是一個正方體,x, y, z的范圍都是[-1,1],多邊形裁剪就是用這個規則體完成的。所以,事實上是透視投影變換由兩步組成:

1)  用透視變換矩陣把頂點從視錐體中變換到裁剪空間的CVV中。

2)  CVV裁剪完成后進行透視除法(一會進行解釋)。







我們一步一步來,我們先從一個方向考察投影關系。




上圖是右手坐標系中頂點在相機空間中的情形。設P(x,z)是經過相機變換之后的點,視錐體由eye——眼睛位置,np——近裁剪平面,fp——遠裁剪平面組成。N是眼睛到近裁剪平面的距離,F是眼睛到遠裁剪平面的距離。投影面可以選擇任何平行于近裁剪平面的平面,這里我們選擇近裁剪平面作為投影平面。設 P’(x’,z’)是投影之后的點,則有z’ = -N。通過相似三角形性質,我們有關系:





同理,有





這樣,我們便得到了P投影后的點P’



從上面可以看出,投影的結果z’始終等于-N,在投影面上。實際上,z’對于投影后的P’已經沒有意義了,這個信息點已經沒用了。但對于3D圖形管線來說,為了便于進行后面的片元操作,例如z緩沖消隱算法,有必要把投影之前的z保存下來,方便后面使用。因此,我們利用這個沒用的信息點存儲z,處理成:



這個形式最大化地使用了3個信息點,達到了最原始的投影變換的目的,但是它太直白了,有一點蠻干的意味,我感覺我們最終的結果不應該是它,你說呢?我們開始結合CVV進行思考,把它寫得在數學上更優雅一致,更易于程序處理。假入能夠把上面寫成這個形式:



那么我們就可以非常方便的用矩陣以及齊次坐標理論來表達投影變換:




其中



哈,看到了齊次坐標的使用,這對于你來說已經不陌生了吧?這個新的形式不僅達到了上面原始投影變換的目的,而且使用了齊次坐標理論,使得處理更加規范化。注意在把 變成的一步我們是使用齊次坐標變普通坐標的規則完成的。這一步在透視投影過程中稱為透視除法(Perspective Division),這是透視投影變換的第2步,經過這一步,就丟棄了原始的z值(得到了CVV中對應的z值,后面解釋),頂點才算完成了投影。而在這兩步之間的就是CVV裁剪過程,所以裁剪空間使用的是齊次坐標 ,主要原因在于透視除法會損失一些必要的信息(如原始z,第4個-z保留的)從而使裁剪變得更加難以處理,這里我們不討論CVV裁剪的細節,只關注透視投影變換的兩步。

  矩陣



就是我們投影矩陣的第一個版本。你一定會問為什么要把z寫成



有兩個原因:

1)  P’的3個代數分量統一地除以分母-z,易于使用齊次坐標變為普通坐標來完成,使得處理更加一致、高效。
2)  后面的CVV是一個x,y,z的范圍都為[-1,1]的規則體,便于進行多邊形裁剪。而我們可以適當的選擇系數a和b,使得 這個式子在z = -N的時候值為-1,而在z = -F的時候值為1,從而在z方向上構建CVV。

接下來我們就求出a和b:




這樣我們就得到了透視投影矩陣的第一個版本:



使用這個版本的透視投影矩陣可以從z方向上構建CVV,但是x和y方向仍然沒有限制在[-1,1]中,我們的透視投影矩陣的下一個版本就要解決這個問題。
為了能在x和y方向把頂點從Frustum情形變成CVV情形,我們開始對x和y進行處理。先來觀察我們目前得到的最終變換結果:


我們知道-Nx / z的有效范圍是投影平面的左邊界值(記為left)和右邊界值(記為right),即[left, right],-Ny / z則為[bottom, top]。而現在我們想把-Nx / z屬于[left, right]映射到x屬于[-1, 1]中,-Ny / z屬于[bottom, top]映射到y屬于[-1, 1]中。你想到了什么?哈,就是我們簡單的線性插值,你都已經掌握了!我們解決掉它:





則我們得到了最終的投影點:





下面要做的就是從這個新形式出發反推出下一個版本的透視投影矩陣。注意到 是 經過透視除法的形式,而P’只變化了x和y分量的形式,az+b和-z是不變的,則我們做透視除法的逆處理——給P’每個分量乘上-z,得到





而這個結果又是這么來的:



則我們最終得到:




M 就是最終的透視變換矩陣。相機空間中的頂點,如果在視錐體中,則變換后就在CVV中。如果在視錐體外,變換后就在CVV外。而CVV本身的規則性對于多邊形的裁剪很有利。OpenGL在構建透視投影矩陣的時候就使用了M的形式。注意到M的最后一行不是(0 0 0 1)而是(0 0 -1 0),因此可以看出透視變換不是一種仿射變換,它是非線性的。另外一點你可能已經想到,對于投影面來說,它的寬和高大多數情況下不同,即寬高比不為1,比如640/480。而CVV的寬高是相同的,即寬高比永遠是1。這就造成了多邊形的失真現象,比如一個投影面上的正方形在CVV的面上可能變成了一個長方形。解決這個問題的方法就是在對多變形進行透視變換、裁剪、透視除法之后,在歸一化的設備坐標(Normalized Device Coordinates)上進行的視口(viewport)變換中進行校正,它會把歸一化的頂點之間按照和投影面上相同的比例變換到視口中,從而解除透視投影變換帶來的失真現象。進行校正前提就是要使投影平面的寬高比和視口的寬高比相同。
便利的投影矩陣生成函數

3D APIs都提供了諸如gluPerspective(fov, aspect, near, far)或者D3DXMatrixPerspectiveFovLH(pOut, fovY, Aspect, zn, zf)這樣的函數為用戶提供快捷的透視矩陣生成方法。我們還是用OpenGL的相應方法來分析它是如何運作的。

gluPerspective(fov, aspect, near, far)

fov即視野,是視錐體在xz平面或者yz平面的開角角度,具體哪個平面都可以。OpenGL和 D3D都使用yz平面。

aspect即投影平面的寬高比。

near是近裁剪平面的距離

far是遠裁剪平面的距離。




上圖中左邊是在xz平面計算視錐體,右邊是在yz平面計算視錐體??梢钥吹阶筮叺牡?步top = right / aspect使用了除法(圖形程序員討厭的東西),而右邊第3步right = top x aspect使用了乘法,這也許就是為什么圖形APIs采用yz平面的原因吧!

透視投影變換推導(2)







在上一篇文章中我們討論了透視投影變換的原理,分析了OpenGL所使用的透視投影矩陣的生成方法。正如我們所說,不同的圖形API因為左右手坐標系、行向量列向量矩陣以及變換范圍等等的不同導致了矩陣的差異,可以有幾十個不同的透視投影矩陣,但它們的原理大同小異。這次我們準備討論一下Direct3D(以下簡稱D3D)以及J2ME平臺上的JSR184(M3G)(以下簡稱M3G)的透視投影矩陣,主要出于以下幾個目的:

(1)       我們在寫圖形引擎的時候需要采用不同的圖形API實現,當前主要是OpenGL和D3D。雖然二者的推導極為相似,但D3D的自身特點導致了一些地方仍然需要澄清。

(2)       DirectX SDK的手冊中有關于透視投影矩陣的一些說明,但并不詳細,甚至有一些錯誤,從而使初學者理解起來變得困難,而這正是本文寫作的目的。

(3)       M3G是J2ME平臺上的3D開發包,采用了OpenGL作為底層標準進行封裝。它的透視投影矩陣使用OpenGL的環境但又進行了簡化,值得一提。
本文努力讓讀者清楚地了解D3D與M3G透視投影矩陣的原理,從而能夠知道它與OpenGL的一些差別,為構建跨API的圖形引擎打好基礎。需要指出的一點是為了完全理解本文的內容,請讀者先理解上一篇文章《深入探索透視投影變換》的內容,因為OpenGL和它們的透視投影矩陣的原理非常相似,因此這里不會像上一篇文章從基礎知識講起,而是對比它們的差異來推導變換矩陣。我們開始!

OpenGL與D3D的基本差異

前面提到,不同API的基本差異導致了最終變換矩陣的不同,而導致OpenGL和D3D的透視投影矩陣不同的原因有以下幾個:

(1)       OpenGL默認使用右手坐標系,而D3D 默認使用左手坐標系。



(2)       OpenGL使用列向量矩陣乘法而D3D使用行向量矩陣乘法。



(3)       OpenGL的CVV的Z范圍是[-1, 1],D3D的CVV的Z范圍是[0, 1]。

    以上這些差異導致了最終OpenGL和D3D的透視投影矩陣的不同。

D3D的透視投影矩陣推導

我們先來看最最基本的透視關系圖(上一篇文章開始的時候使用的圖):



這里我們考察的是xz平面上的關系,yz平面上的關系同理。這里o是相機位置。np是近裁剪平面,也是投影平面,N是它到相機的距離。fp是遠裁剪平面,F 是它到相機的位置。p是需要投影的點,p’是投影之后的點。根據相似三角形定理,我們有



則有



注意到OpenGL使用右手坐標系,因此應該使用-N(請參考上一篇文章的這一步),而D3D使用左手坐標系,因此使用N,這是二者的不同點之一。這樣,我們得到投影之后的點



第三個信息點是變換之后的z在投影平面上的位置,也就是N,它已經沒用了,我們把p’寫成



從而用第三個沒用信息點它來存儲z(如果讀者對這一點不太了解,請參考上一篇文章)。接下來我們求出a和b,從而在z方向上構建CVV。請注意這里是 OpenGL和D3D的另一個不同點,OpenGL的CVV的z范圍是[-1, 1],而D3D的CVV的z范圍是[0, 1]。也就是說,D3D 中在近裁剪平面上的點投影之后的點會處于CVV的z=0平面上,而在遠裁剪平面上的點投影之后的點會在CVV的z=1平面上。這樣我們的計算方程就是



從而我們得到了透視投影矩陣的第一個版本







這個時候第三個分量變換到CVV情形了,CVV的z范圍是[0,1]。接下來根據上一篇文章所講到的,我們要把前兩個分量變成CVV情形,CVV的x和y范圍是[-1, 1],如下圖所示:



使用線性插值,我們有:



這里left和right是投影平面的左右范圍,top和bottom是投影平面的上下范圍。xcvv和ycvv是我們需要算出的在CVV情形中的x和y,也就是我們要計算出的結果。但在算出它們之前,我們先把上面的式子寫成:




這里有一個需要注意的地方,如果投影平面在x方向上居中,則



那么第一個式子就可以銷掉等號兩邊的1/2,寫成



同理,如果投影平面在y方向上居中,則第二個式子可以寫成




則我們現在分兩種情況討論:

(1)       投影平面的中心和x-y平面的中心重合(在x和y方向上都居中)

(2)       一般情況


我們分別討論:

(1)特殊情況方程



這組是特殊情況,方程比較簡單,但也是使用頻率最高的方式(這是D3DXMatrixPerspectiveLH、 D3DXMatrixPerspectiveRH、D3DXMatrixPerspectiveFovLH、 D3DXMatrixPerspectiveFovRH四個方法所使用的情況)。我們導出它:



則我們反推出透視投影矩陣:




其中



而 r-l和t-b可以分別看作是投影平面的寬w和高h。最后那個矩陣就是D3D的透視投影矩陣之一。另外呢,如果我們不知道right、left、top以及bottom這幾個參量,也可以根據視野(FOV – Field Of View)參量來求得。下面是兩個平面的視野關系圖:





  
其中,兩個fov分別是在x-z以及y-z平面上的視野。如果只給了一個視野,也可以通過投影平面的寬高比計算出來:



用一個視野算出w或者h,然后用寬高比算出h或者w。


(2)一般情況的方程



這組方程比較繁瑣,但更具一般性(和OpenGL一般矩陣的推導一致,這也是D3DXMatrixPerspectiveOffCenterLH和 D3DXMatrixPerspectiveOffCenterRH兩個方法所使用的情況)。我們導出它:



我們繼續反推出透視投影矩陣:



其中



最后那個矩陣就是D3D的一般透視投影矩陣。

好了,目前為止,我們已經導出了D3D的兩個透視投影矩陣。下面我把上一篇導出的OpenGL的透視投影矩陣寫出來,大家可以拿它和剛剛導出的D3D的一般性透視投影矩陣做一個對比。


如果仔細觀察,可以發現二者在元素的布局上是一個轉置的關系,這個就是由它們使用的左右手坐標系以及使用的行列矩陣的差異造成的。而另外在一些元素的細節上也存在著差異,這是由于D3D的CVV的z范圍不同造成的??梢娫谠硐嗤那闆r下,細微的環境差異可以造成非常大的變化,而這就是透視投影矩陣存在諸多不同版本的原因。一般情況的透視投影矩陣也可以使用視野方式來定義,方法和特殊情況相同。


M3G的透視投影矩陣

M3G是對OpenGL進行的一個封裝,它的透視投影變換矩陣被放到了類Camera里面。因為它封裝了OpenGL,因此環境和OpenGL相同:右手坐標系、列向量乘法、CVV范圍[-1, 1]。它唯一和OpenGL有些差異的地方就在于它只使用投影平面的中心和x-y平面的中心重合(在x和y方向上都居中)的情況(就是我們上面D3D的第一種特殊情況)。我們用OpenGL透視投影矩陣最終版本來說明(再次提醒,如果讀者對此感到迷惑,請參考第一篇文章):



上面是OpenGL透視投影矩陣的最終版本,也是一般性版本,我們要把它變成特殊性,版本,非常簡單,和上面D3D的特殊情況一樣,我們從對x和y進行插值的那一步來看:



和 D3D的第一種情況一樣,銷掉兩邊的1/2,得到:



則我們反推出透視投影矩陣:



最右邊那個矩陣就是M3G的透視投影矩陣。仍然可以通過視野參數來設置透視投影矩陣,這里請讀者自行推導,方法與上面D3D的完全相同。




posted on 2008-12-15 18:44 七星重劍 閱讀(10818) 評論(7)  編輯 收藏 引用 所屬分類: Game Graphics

FeedBack:
# re: 圖形學掃盲--(2)透視投影(Perspective Projection) 2009-01-04 19:04 Yao
真慚愧,我剛學圖形就老想跳過這一堆公式,你卻專門拿來研究。我太浮躁了。  回復  更多評論
  
# re: 圖形學掃盲--(2)透視投影(Perspective Projection) 2009-01-04 23:19 七星重劍
@Yao
我更慚愧啊,我做游戲都這么長時間了才看這個  回復  更多評論
  
# re: 圖形學掃盲--(2)透視投影(Perspective Projection) 2010-08-01 16:39 aawolf
寫得很好,可惜圖看不到了,缺圖使得理解有些困難,希望樓主有機會補一下圖。  回復  更多評論
  
# re: 圖形學掃盲--(2)透視投影(Perspective Projection)[未登錄] 2012-11-14 09:23 nancy
博主,麻煩您更新一下圖片鏈接吧,真心感謝!  回復  更多評論
  
# re: 圖形學掃盲--(2)透視投影(Perspective Projection) 2012-11-28 18:01 七星重劍
最近太忙,沒空更新圖片鏈接,大家看我更新的鏈接去下載doc格式的吧  回復  更多評論
  
# re: 圖形學掃盲--(2)透視投影(Perspective Projection) 2012-11-28 20:11 七星重劍
忍不住又都把圖片鏈接更新了!!!!??!  回復  更多評論
  
# re: 圖形學掃盲--(2)透視投影(Perspective Projection)[未登錄] 2014-04-15 08:46 sky
頂樓主,講的很清楚,受益匪淺!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲欧美日韩在线观看a三区| 亚洲专区国产精品| 午夜日韩电影| 亚洲一区视频| 狠狠做深爱婷婷久久综合一区| 久久亚洲国产精品一区二区| 老司机精品视频一区二区三区| 在线播放精品| 亚洲欧洲午夜| 欧美三区在线观看| 久久久人成影片一区二区三区观看| 久久精品30| 亚洲肉体裸体xxxx137| 日韩亚洲欧美成人| 国产永久精品大片wwwapp| 欧美国产日产韩国视频| 欧美日韩一区视频| 老司机精品视频网站| 欧美激情精品久久久| 国产一区白浆| 欧美一区二区三区视频免费| 久久av一区| 一本久久a久久免费精品不卡| 亚洲尤物视频在线| 亚洲精品国产品国语在线app| 亚洲视频网站在线观看| 影音先锋在线一区| 国产精品99久久久久久人| 狠狠色狠狠色综合日日91app| 亚洲精品一品区二品区三品区| 国产偷自视频区视频一区二区| 亚洲国产另类 国产精品国产免费| 国产精品你懂的| 亚洲国产精品久久精品怡红院| 国产毛片一区二区| 亚洲美女av电影| 在线观看一区视频| 午夜视频一区| 亚洲一级在线观看| 一区二区国产在线观看| 亚洲国产成人精品女人久久久 | 久久欧美肥婆一二区| 欧美日韩在线观看一区二区三区| 久久影院亚洲| 国产日韩高清一区二区三区在线| 亚洲精品字幕| 亚洲精品在线视频| 久久亚洲欧洲| 美女精品网站| 欧美日韩视频在线一区二区| 久久影院亚洲| 久久精品一二三| 国产精品免费看久久久香蕉| 亚洲精品在线视频观看| 91久久精品一区二区三区| 久久www成人_看片免费不卡| 亚洲欧美综合精品久久成人 | 亚洲专区欧美专区| 亚洲淫性视频| 国产精品国产三级国产| 一本久道久久久| 中文在线资源观看网站视频免费不卡 | 亚洲午夜精品久久久久久浪潮| 免费在线亚洲欧美| 在线亚洲欧美| 欧美日韩1区| 99国产精品久久久久久久久久 | 国产亚洲毛片| 欧美一级午夜免费电影| 久久久精彩视频| 国产一区在线播放| 久久人人97超碰精品888| 欧美www视频| 亚洲精品久久在线| 欧美日精品一区视频| 在线视频你懂得一区| 香蕉成人久久| 永久免费视频成人| 男女av一区三区二区色多| 亚洲黄色毛片| 亚洲综合色在线| 国产一区二区三区四区老人| 久久天天躁夜夜躁狠狠躁2022| 欧美国产日韩二区| 亚洲一区二区三区精品在线| 国产农村妇女精品一二区| 欧美在线视频一区二区| 亚洲激情黄色| 亚洲免费在线观看| 樱桃国产成人精品视频| 欧美喷水视频| 欧美亚洲综合另类| 亚洲国产欧美日韩另类综合| 亚洲在线一区二区| 精久久久久久| 欧美日韩在线视频一区二区| 欧美综合77777色婷婷| 亚洲黄色成人| 久久国产精品黑丝| 日韩天堂在线视频| 国产亚洲欧美日韩日本| 欧美精品在线免费播放| 欧美综合二区| 一区二区三区日韩| 欧美a级在线| 欧美一区二区三区的| 亚洲精品国产精品国自产观看浪潮 | 国产精品二区在线| 免费日韩av片| 欧美一区二区女人| 99精品国产高清一区二区| 美女脱光内衣内裤视频久久网站| 欧美激情综合五月色丁香小说| 久久免费精品日本久久中文字幕| 日韩视频精品在线观看| 国产亚洲毛片在线| 国产精品久久久久久久免费软件| 欧美jizz19hd性欧美| 久久国产视频网| 亚洲欧美成人在线| 日韩视频二区| 亚洲二区在线观看| 美女黄网久久| 久久综合久久久| 久久久精品一品道一区| 亚洲欧美日韩精品久久亚洲区 | 久久国产99| 欧美一区二区视频97| 一区二区三区国产在线观看| 亚洲黄色成人网| 在线精品高清中文字幕| 国内久久婷婷综合| 国模 一区 二区 三区| 国产欧美精品一区| 国产日韩欧美一区二区三区在线观看| 欧美日韩精品免费在线观看视频| 欧美国产另类| 欧美福利小视频| 欧美精品福利视频| 欧美人交a欧美精品| 欧美精品免费播放| 欧美日本精品在线| 欧美日韩一级片在线观看| 欧美精品一线| 欧美深夜福利| 国产精品色婷婷久久58| 国产精品丝袜xxxxxxx| 国产欧美精品在线播放| 国产一级一区二区| 伊人影院久久| 亚洲欧洲一级| 亚洲视频网站在线观看| 午夜视频在线观看一区| 久久国产毛片| 欧美va亚洲va日韩∨a综合色| 欧美电影免费观看高清完整版| 亚洲高清资源综合久久精品| 亚洲人成网在线播放| 亚洲视频在线观看三级| 午夜久久美女| 久久亚洲春色中文字幕| 欧美—级高清免费播放| 国产精品成人av性教育| 国产日韩精品入口| 亚洲国产日韩欧美在线动漫| 99热免费精品在线观看| 欧美一区二区三区免费在线看| 久久午夜av| 日韩视频一区二区三区在线播放| 亚洲在线不卡| 欧美 日韩 国产在线| 国产精品久久久久aaaa樱花| 国产一区高清视频| 一本色道久久88精品综合| 欧美一二区视频| 欧美成人免费全部| 亚洲一二三区在线观看| 美女视频黄a大片欧美| 国产精品v欧美精品v日韩精品| 国产一区二区在线观看免费| 99re热精品| 老妇喷水一区二区三区| 中国亚洲黄色| 蜜臀av在线播放一区二区三区 | 久久视频一区二区| 欧美视频一二三区| 1000部精品久久久久久久久| 亚洲一区在线免费| 亚洲国产99精品国自产| 欧美福利专区| 激情婷婷久久| 亚洲美女在线观看| 另类综合日韩欧美亚洲| 一区二区三区欧美亚洲| 欧美高清视频在线播放| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲在线免费| 99精品欧美一区二区三区| 欧美成人免费在线| 在线观看日韩www视频免费|