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

積木

No sub title

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

原文轉(zhuǎn)自:http://www.gesoftfactory.com/developer/Transform.htm

(提示:原文有圖片。)

三維變換

在使用三維圖形的應(yīng)用程序中,可以用變換做以下事情:

  • 描述一個物體相對于另一個物體的位置。
  • 旋轉(zhuǎn)并改變物體的大小。
  • 改變觀察的位置、方向和視角。

可以用一個4 x 4矩陣將任意點(x,y,z)變換為另一個點(x',y',z')。

對(x,y,z)和矩陣執(zhí)行以下操作產(chǎn)生點(x',y',z')。

 

最常見的變換是平移、旋轉(zhuǎn)和縮放。可以將產(chǎn)生這些效果的矩陣合并成單個矩陣,這樣就可以一次計算多種變換。例如,可以構(gòu)造單個矩陣,對一系列的點進行平移和旋轉(zhuǎn)。更多信息,請參閱矩陣串接

矩陣以行列順序書寫。一個沿每根軸均勻縮放頂點的矩陣,也稱為統(tǒng)一縮放,用如下數(shù)學(xué)符號表示。

 

在C++應(yīng)用程序中,Microsoft® Direct3D®使用D3DMATRIX結(jié)構(gòu),將矩陣聲明為一個二維數(shù)組。以下示例代碼顯示了如何初始化一個D3DMATRIX結(jié)構(gòu),使之成為一個統(tǒng)一縮放矩陣。

// 本例中,s為浮點類型的變量

 

D3DMATRIX scale = {

    s,               0.0f,            0.0f,            0.0f,

    0.0f,            s,               0.0f,            0.0f,

    0.0f,            0.0f,            s,               0.0f,

    0.0f,            0.0f,            0.0f,            1.0f

};


平移和縮放


平移

以下變換將點(x,y,z)平移到一個新的點(x',y',z')。

 

可以在C++應(yīng)用程序中手工創(chuàng)建一個平移矩陣。以下示例代碼顯示了的一個函數(shù)的源碼,該函數(shù)創(chuàng)建一個矩陣用于平移頂點。

D3DXMATRIX Translate(const float dx, const float dy, const float dz) {
    D3DXMATRIX ret;
 
    D3DXMatrixIdentity(&ret); // 由Direct3DX實現(xiàn)
    ret(3, 0) = dx;
    ret(3, 1) = dy;
    ret(3, 2) = dz;
    return ret;
}    // 平移結(jié)束

為了方便,Direct3DX工具庫提供了D3DXMatrixTranslation函數(shù)。

縮放

以下變換用指定值縮放點(x,y,z)的x-,y-和z-方向,產(chǎn)生新的點(x',y',z')。

 


旋轉(zhuǎn)


這里描述的變換是基于左手坐標(biāo)系的,也許和別處見到的變換矩陣不同。更多信息,請參閱三維坐標(biāo)系

以下變換將點(x,y,z)圍繞x軸旋轉(zhuǎn),產(chǎn)生新的點(x',y',z')。

 

以下變換將點圍繞y軸旋轉(zhuǎn)。

 

以下變換將點圍繞z軸旋轉(zhuǎn)。

 

在這些示例矩陣中,希臘字母(θ)表示旋轉(zhuǎn)的角度,以弧度為單位。當(dāng)沿著旋轉(zhuǎn)軸朝原點看時,角度以順時針方向計量。

C++應(yīng)用程序可以用Direct3D擴展(D3DX)工具庫提供的D3DXMatrixRotationXD3DXMatrixRotationXD3DXMatrixRotationX函數(shù)創(chuàng)建旋轉(zhuǎn)矩陣。以下示例是D3DXMatrixRotationX函數(shù)的源碼。

D3DXMATRIX* WINAPI D3DXMatrixRotationX
    ( D3DXMATRIX *pOut, float angle )
{
#if DBG
    if(!pOut)
        return NULL;
#endif
 
    float sin, cos;
    sincosf(angle, &sin, &cos); // 計算角度的正弦和余弦值。
 
    pOut->_11 = 1.0f; pOut->_12 = 0.0f;   pOut->_13 = 0.0f; pOut->_14 = 0.0f;
    pOut->_21 = 0.0f; pOut->_22 = cos;    pOut->_23 = sin; pOut->_24 = 0.0f;
    pOut->_31 = 0.0f; pOut->_32 = -sin;    pOut->_33 = cos; pOut->_34 = 0.0f;
    pOut->_41 = 0.0f; pOut->_42 = 0.0f;   pOut->_43 = 0.0f; pOut->_44 = 1.0f;
 
    return pOut;
}

 

( D3DXMATRIX *pOut, float angle )

 

 

if(!pOut)

return NULL;

 

 

float sin, cos;

sincosf(angle, &sin, &cos); // Determine sin and cos of angle.

 

pOut->_11 = 1.0f; pOut->_12 = 0.0f;   pOut->_13 = 0.0f; pOut->_14 = 0.0f;

pOut->_21 = 0.0f; pOut->_22 = cos;    pOut->_23 = sin; pOut->_24 = 0.0f;

pOut->_31 = 0.0f; pOut->_32 = -sin;    pOut->_33 = cos; pOut->_34 = 0.0f;

pOut->_41 = 0.0f; pOut->_42 = 0.0f;   pOut->_43 = 0.0f; pOut->_44 = 1.0f;

 

return pOut;

 


矩陣串接


使用矩陣的一個優(yōu)勢就是可以通過把兩個以上的矩陣相乘,將它們的效果合并在一起。這意味著,要先旋轉(zhuǎn)一個建模然后把它平移到某個位置,無需使用兩個矩陣,只要把旋轉(zhuǎn)矩陣和平移矩陣相乘,產(chǎn)生一個包含了所有效果的合成矩陣。這個過程被稱為矩陣串接,可以寫成以下公式。

 

在這個公式中,C是將被創(chuàng)建的合成矩陣,M1Mn是矩陣C包含的單個矩陣。雖然大多數(shù)情況下,只需要串接兩三個矩陣,但實際上并沒有數(shù)量上的限制。

可以使用D3DXMatrixMultiply函數(shù)進行矩陣乘法。

進行矩陣乘法時先后次序是至關(guān)重要的。前面的公式反映了矩陣串接從左到右的規(guī)則。也就是說,用來創(chuàng)建合成矩陣的每個矩陣產(chǎn)生的直觀效果會按從左到右的次序出現(xiàn)。下面顯示了一個典型的世界變換矩陣。想象一下給一個旋轉(zhuǎn)飛行的碟子創(chuàng)建世界變換矩陣。應(yīng)用程序也許想讓飛行的碟子繞它的中心——建模空間中的y軸——旋轉(zhuǎn),然后把它平移到場景中的另一個位置。要實現(xiàn)這樣的效果,首先創(chuàng)建一個旋轉(zhuǎn)矩陣,然后將它與平移矩陣相乘,如以下公式所示。

 

在這個公式中,Ry是繞y軸的旋轉(zhuǎn)矩陣,Tw是平移到世界坐標(biāo)中某個位置的矩陣。

矩陣相乘的順序很重要,因為矩陣乘法是不可交換的,這和兩個標(biāo)量相乘不同。將矩陣以相反的順序相乘會產(chǎn)生這樣的直觀效果:先把飛行中的碟子平移到世界空間中的某個位置,然后將它圍繞世界坐標(biāo)的原點旋轉(zhuǎn)。

無論創(chuàng)建何種類型的矩陣,都要記住從左到右的規(guī)則,這樣才能保證得到想要的效果。


世界變換


對世界變換的討論介紹了基本概念,并提供了如何在Microsoft® Direct3D®應(yīng)用程序中設(shè)置世界變換矩陣的細節(jié)。

什么是世界變換

世界變換將坐標(biāo)從建模空間,在這個空間中的頂點相對于建模的局部原點定義,轉(zhuǎn)變到世界空間,在這個空間中的頂點相對于場景中所有物體共有的原點定義。本質(zhì)上,世界變換將一個建模放到世界中,并由此而得名。下圖描繪了世界坐標(biāo)系統(tǒng)和建模的局部坐標(biāo)系統(tǒng)間的關(guān)系。

 

世界變換可以包含任意數(shù)量的平移、旋轉(zhuǎn)和縮放的合并。有關(guān)對變換的數(shù)學(xué)討論,請參閱三維變換

設(shè)置世界矩陣

同任何其它變換一樣,通過將一系列變換矩陣串接成單個矩陣,應(yīng)用程序可以創(chuàng)建包含這些矩陣全部效果的世界矩陣。最簡單的情況下,建模在世界的原點并且它的局部坐標(biāo)軸與世界空間的方向相同,這時世界矩陣就是單位矩陣。更通常的情況下,世界矩陣是一系列矩陣的合成,包含一個平移矩陣,并且根據(jù)需要可能有一個以上的旋轉(zhuǎn)矩陣。

以下示例,來自一個用C++編寫的假想三維建模類,使用Direct3D擴展(D3DX)工具庫提供的幫助函數(shù)創(chuàng)建了一個世界矩陣,這個世界矩陣包含了三個旋轉(zhuǎn)矩陣,用于調(diào)整三維建模的方向,以及一個平移矩陣,用來根據(jù)建模在世界空間中的相對坐標(biāo)重新確定它的位置。

/*
 * 根據(jù)本示例的目的,假設(shè)以下變量都是有效的并經(jīng)過初始化。
*
 * 變量m_xPos,m_yPos,m_zPos包含了建模在世界坐標(biāo)中的位置。
*
 * 變量m_fPitch,m_fYaw和m_fRoll為浮點數(shù),包含了建模的方向,
 * 用pitch,yaw和roll旋轉(zhuǎn)角表示,以弧度為單位。
 */
 
void C3DModel::MakeWorldMatrix( D3DXMATRIX* pMatWorld )
{
    D3DXMATRIX MatTemp; // 用于旋轉(zhuǎn)的臨時矩陣
    D3DXMATRIX MatRot;   // 最終的旋轉(zhuǎn)矩陣,應(yīng)用于pMatWorld.
 
    // 使用從左到右的矩陣串接順序,在旋轉(zhuǎn)之前對物體在世界空間中
    // 的位置進行平移。
    D3DXMatrixTranslation(pMatWorld, m_xPos, m_yPos, m_zPos);
    D3DXMatrixIdentity(&MatRot);
 
    // 現(xiàn)在將方向變量應(yīng)用于世界矩陣
    if(m_fPitch || m_fYaw || m_fRoll) {
        // 產(chǎn)生并合成旋轉(zhuǎn)矩陣。
        D3DXMatrixRotationX(&MatTemp, m_fPitch);         // Pitch
        D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
        D3DXMatrixRotationY(&MatTemp, m_fYaw);           // Yaw
        D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
        D3DXMatrixRotationZ(&MatTemp, m_fRoll);          // Roll
        D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
 
        // 應(yīng)用旋轉(zhuǎn)矩陣,得到最后的世界矩陣。
        D3DXMatrixMultiply(pMatWorld, &MatRot, pMatWorld);
    }
}

當(dāng)準(zhǔn)備好世界變換矩陣后,應(yīng)該調(diào)用IDirect3DDevice9::SetTransform方法設(shè)置它,并把第一個參數(shù)指定D3DTS_WORLD宏。

注意    Direct3D使用應(yīng)用程序設(shè)置的世界和觀察矩陣配置許多內(nèi)部數(shù)據(jù)結(jié)構(gòu)。應(yīng)用程序每次設(shè)置新的世界或觀察矩陣時,系統(tǒng)都要重新計算相關(guān)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。頻繁地設(shè)置這些矩陣——例如,每幀上千次——是計算量很大的。通過將世界矩陣和觀察矩陣串接成一個世界/觀察矩陣,并將該矩陣設(shè)置為世界矩陣,然后將觀察矩陣設(shè)置為單位矩陣,應(yīng)用程序可以將所需的計算次數(shù)減到最少。最好保存一份單獨的世界矩陣和觀察矩陣的副本在高速緩存中,這樣就可以根據(jù)需要修改、串接及重置世界矩陣。為清晰起見,本文檔中的Direct3D示例很少使用這項優(yōu)化。


觀察變換


本節(jié)介紹觀察變換的基本概念,并提供有關(guān)如何在Microsoft® Direct3D®應(yīng)用程序中設(shè)置觀察矩陣的細節(jié)。信息被分為以下主題。

什么是觀察變換?

觀察變換根據(jù)觀察者在世界空間中的位置,把頂點變換到攝像機空間。在攝像機空間中,攝像機,或觀察者,位于原點,朝sz軸的正向看去。再次提醒一下,因為Direct3D使用左手坐標(biāo)系,所以z軸的正向是朝著場景的。觀察矩陣根據(jù)攝像機的位置——攝像機空間的原點——和方向重定位世界中的所有物體。

有兩方法可以創(chuàng)建觀察矩陣。所有情況下,攝像機在世界空間中的邏輯位置和方向會被用作起始點來創(chuàng)建觀察矩陣,得到的觀察矩陣會被應(yīng)用于場景中的三維建模。觀察矩陣平移并旋轉(zhuǎn)物體,將它們放入攝像機空間中,攝像機位于原點。創(chuàng)建觀察矩陣的一種方法是把平移矩陣和圍繞每根坐標(biāo)軸旋轉(zhuǎn)的旋轉(zhuǎn)矩陣合并。這種方法使用了以下通用矩陣公式。

 

在這個公式中,V是要創(chuàng)建的觀察矩陣,T是在世界中重定位物體的平移矩陣,RxRz分別是繞x軸,y軸和z軸旋轉(zhuǎn)物體的旋轉(zhuǎn)矩陣。平移和旋轉(zhuǎn)矩陣基于攝像機在世界空間中邏輯位置和方向。因此,如果攝像機在世界中的邏輯位置是<10,20,100>,那么平移矩陣的目的是沿x軸移動物體-10單位,沿y軸移動-20單位,沿z軸移動-100單位。公式中的旋轉(zhuǎn)矩陣基于攝像機的方向,根據(jù)攝像機空間的坐標(biāo)軸與世界空間的坐標(biāo)軸間的夾角決定。例如,如果前面提到的攝像機是垂直向下放的,那么它的z軸與世界空間的z軸有90度夾角,如下圖所示。

 

旋轉(zhuǎn)矩陣將角度相同但方向相反的旋轉(zhuǎn)量應(yīng)用于場景中的建模。這個攝像機的觀察矩陣包含了一個繞x軸-90度的旋轉(zhuǎn)。旋轉(zhuǎn)矩陣與平移矩陣合并生成觀察矩陣,觀察矩陣調(diào)整物體在場景中的位置和方向,使它們的頂部朝著攝像機,看起來就好像攝像機在建模的上方一樣。

設(shè)置觀察矩陣

D3DXMatrixLookAtLHD3DXMatrixLookAtRH輔助函數(shù)根據(jù)攝像機的位置和被觀察點創(chuàng)建一個觀察矩陣。

以下示例代碼創(chuàng)建了一個用于右手系的觀察矩陣。

D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtRH(&out, &eye, &at, &up);

Direct3D使用應(yīng)用程序設(shè)置的世界矩陣和觀察矩陣配置許多內(nèi)部數(shù)據(jù)結(jié)構(gòu)。每次應(yīng)用程序設(shè)置一個新的世界矩陣或觀察矩陣,系統(tǒng)都要重新計算相關(guān)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。頻繁地設(shè)置這些矩陣——例如,每幀20,000次——計算量非常大。通過將世界矩陣和觀察矩陣串接成一個世界/觀察矩陣,并將之設(shè)置為世界矩陣,然后將觀察矩陣設(shè)為單位矩陣,應(yīng)用程序可以將所需的計算量減到最小。最好保存一份單獨的世界矩陣和觀察矩陣的副本在高速緩存中,這樣就可以根據(jù)需要修改、串接及重置世界矩陣。為清晰起見,Direct3D示例很少使用這項優(yōu)化。


投影變換


可以認為投影變換是控制攝像機的內(nèi)部參數(shù),這選擇攝像機的鏡頭有些相似。這是三種類型的變換中最為復(fù)雜的。對投影變換的討論被分為以下主題。


什么是投影變換?


典型的投影變換就是一個縮放和透視投影。投影變換將視棱錐轉(zhuǎn)變?yōu)橐粋€立方體。因為視棱錐的近端比遠端小,所以這就產(chǎn)生了離攝像機近的物體被放大的效果,這就是透視如何被應(yīng)用于場景的。

視棱錐中,攝像機與觀察變換空間的原點之間的距離被定義為D,因此投影矩陣看起來是這樣:

 

通過在z方向平移-D,觀察矩陣將攝像機平移到原點。平移矩陣如下所示:

 

將平移矩陣與投影矩陣相乘(T*P),得到合成的投影矩陣。如下:

 

下圖描繪了透視投影如何將視棱錐轉(zhuǎn)變到新的坐標(biāo)空間。注意棱錐變成了立方體,同時原點從場景的右上角移到了中心。(譯注:應(yīng)該是從前裁剪平面的中心移到了原點)

 

在透視變換中,x和y方向的邊界值是-1和1。Z方向的邊界值分別是,0對應(yīng)于前平面,1對應(yīng)于后平面。

這個矩陣根據(jù)指定的從攝像機到近裁剪平面的距離,平移并縮放物體,但沒有考慮視角(fov),并且用它為遠處物體產(chǎn)生的z值可能幾乎相同,這使深度比較變得困難。以下矩陣解決了這些問題,并根據(jù)視區(qū)的縱橫比調(diào)整頂點,這使它成為透視投影的一個很好的選擇。

 

在這個矩陣中,Zn是近裁剪平面的z值。變量whQ有以下含義。注意fovwfovh表示視區(qū)在水平和垂直方向上的視角,以弧度為單位。

 

對應(yīng)用程序而言,使用視角的角度定義x和y的比例系數(shù)可能不如使用視區(qū)在水平和垂直方向上的大小(在攝像機空間中)方便。可以用數(shù)學(xué)推導(dǎo),得出下面兩個使用視區(qū)大小計算wh的公式,它們與前面的公式是等價的。

 

在這兩個公式中,Zn表示近裁剪平面的位置,VwVh變量表示視區(qū)在攝像機空間的寬和高。

對于C++應(yīng)用程序而言,這兩個大小直接對應(yīng)于D3DVIEWPORT9結(jié)構(gòu)的WidthHeight成員。(譯注:雖然直接對應(yīng),但是不等價的,因為VwVh位于攝像機空間,而WidthHeight位于屏幕空間)

無論決定使用什么公式,非常重要的一點是要盡可能將Zn設(shè)得大,因為接近攝像機的z值變化不大。這使得用16位z緩存的深度比較變得有點復(fù)雜。

同世界變換和觀察變換一樣,應(yīng)用程序調(diào)用IDirect3DDevice9::SetTransform方法設(shè)置投影矩陣。


設(shè)置投影矩陣


以下ProjectionMatrix示例函數(shù)設(shè)置了前后裁剪平面,以及在水平和垂直方向上視角的角度。此處的代碼與什么是投影矩陣?主題中討論的方法相似。視角應(yīng)該小于弧度π。

D3DXMATRIX 
ProjectionMatrix(const float near_plane, // 到近裁剪平面的距離
                 const float far_plane, // 到遠裁剪平面的距離
                 const float fov_horiz, // 水平視角,用弧度表示
                 const float fov_vert)   // 垂直視角,用弧度表示
{
    float    h, w, Q;
 
    w = (float)1/tan(fov_horiz*0.5); // 1/tan(x) == cot(x)
    h = (float)1/tan(fov_vert*0.5);   // 1/tan(x) == cot(x)
    Q = far_plane/(far_plane - near_plane);
 
    D3DXMATRIX ret;
    ZeroMemory(&ret, sizeof(ret));
 
    ret(0, 0) = w;
    ret(1, 1) = h;
    ret(2, 2) = Q;
    ret(3, 2) = -Q*near_plane;
    ret(2, 3) = 1;
    return ret;
}   // End of ProjectionMatrix

在創(chuàng)建矩陣之后,調(diào)用IDirect3DDevice9::SetTransform方法設(shè)置投影矩陣,要將第一個參數(shù)設(shè)為D3DTS_PROJECTION

Direct3D擴展(D3DX)工具庫提供了以下函數(shù),幫助應(yīng)用程序設(shè)置投影矩陣。

  • D3DXMatrixPerspectiveLH
  • D3DXMatrixPerspectiveRH
  • D3DXMatrixPerspectiveFovLH
  • D3DXMatrixPerspectiveFovRH
  • D3DXMatrixPerspectiveOffCenterLH
  • D3DXMatrixPerspectiveOffCenterRH

W友好投影矩陣


對于已經(jīng)用世界、觀察和投影矩陣變換過的頂點,Microsoft® Direct3D®使用頂點的W成員進行深度緩存中基于深度的計算或計算霧效果。類似這樣的計算要求應(yīng)用程序歸一化投影矩陣,使生成的W與世界空間中的Z相同。簡而言之,如果應(yīng)用程序的投影矩陣包含的(3,4)系數(shù)不為1,那么為了生成適用的矩陣,應(yīng)用程序必須用(3,4)系數(shù)的倒數(shù)縮放所有的系數(shù)。如果應(yīng)用程序不提供符合這樣要求的矩陣,那么會造成霧效果和深度緩存不正確。什么是投影矩陣?中推薦的矩陣符合基于w的計算的要求。

下圖顯示了不符合要求的投影矩陣,以及對同一個矩陣進行縮放,這樣就可以啟用基于視點的霧。

 

我們假設(shè)在前面的矩陣中,所有變量都不為零。更多有關(guān)相對于視點的霧的信息,請參閱基于視點的深度與基于Z的深度的比較。更多有關(guān)基于w的深度緩存,請參閱深度緩存

注意 Direct3D在基于w的深度計算中使用當(dāng)前設(shè)置的投影矩陣。因此,即使應(yīng)用程序不使用Direct3D變換流水線,但是為了使用基于w的特性,應(yīng)用程序必須設(shè)置一個符合要求的投影矩陣。

 



posted on 2012-08-31 16:31 Jacc.Kim 閱讀(775) 評論(0)  編輯 收藏 引用 所屬分類: VC / C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品毛片va一区二区三区| 欧美性猛交一区二区三区精品| 国产偷国产偷亚洲高清97cao| 午夜电影亚洲| 亚洲专区一区二区三区| 国产欧美精品久久| 久久午夜羞羞影院免费观看| 久久精品一区二区三区不卡牛牛| 激情久久综合| 亚洲国产成人精品久久久国产成人一区 | 欧美中文字幕| 狠狠干成人综合网| 亚洲国产成人精品久久| 欧美日韩国产小视频在线观看| 在线中文字幕一区| 午夜一区二区三区在线观看| 激情久久久久久久| 亚洲精品久久久久久久久| 国产精品区一区二区三| 裸体素人女欧美日韩| 欧美精品三级日韩久久| 欧美一级视频| 欧美高清一区| 欧美亚洲网站| 欧美激情视频一区二区三区不卡| 亚洲欧美成人在线| 美女精品国产| 欧美一区二区三区喷汁尤物| 蜜桃伊人久久| 久久九九精品99国产精品| 欧美成人视屏| 欧美一区二区在线| 欧美日韩播放| 你懂的网址国产 欧美| 国产精品久久国产三级国电话系列| 久久婷婷国产综合尤物精品| 欧美精品一区二区视频| 久久久久久久网站| 欧美日韩在线亚洲一区蜜芽| 美女福利精品视频| 国产精品久久久久久户外露出| 欧美77777| 国产一区视频网站| 亚洲午夜伦理| 日韩视频免费| 老司机精品导航| 久久亚洲国产成人| 国产精品婷婷| 在线午夜精品| 亚洲图片在线观看| 欧美精品123区| 欧美va亚洲va日韩∨a综合色| 国产欧美日韩精品a在线观看| 亚洲精品一区二区在线| 亚洲欧洲偷拍精品| 久久久久五月天| 久久天天综合| 激情综合网址| 久久久www| 久久久久久久久久久一区| 国产精品中文字幕欧美| 制服诱惑一区二区| 亚洲欧美欧美一区二区三区| 欧美日韩综合另类| 99re热这里只有精品免费视频| 亚洲精品国产精品国自产在线| 久久美女性网| 欧美成人精品高清在线播放| 在线免费观看日本一区| 久久精品官网| 香港久久久电影| 国产精品二区在线观看| 香蕉久久久久久久av网站 | 亚洲精品美女91| 欧美精品久久久久久久免费观看| 亚洲国产99精品国自产| 欧美一级一区| 99精品99| 亚洲人成绝费网站色www| 国产视频欧美视频| 欧美色精品天天在线观看视频| 老司机午夜精品视频| 午夜精品在线看| 在线亚洲伦理| 亚洲精品一区二区三区蜜桃久| 欧美1区2区3区| 久久久久9999亚洲精品| 亚洲欧美日韩天堂| 亚洲最新视频在线| 亚洲精品欧美日韩专区| 亚洲二区在线观看| 国内成人自拍视频| 国产精品亚洲不卡a| 欧美日韩在线一区二区| 欧美国产日韩在线| 久久这里只有精品视频首页| 久久国产精品一区二区三区| 亚洲欧美国产va在线影院| 一区二区三区免费在线观看| 亚洲精品欧美极品| 亚洲黄色三级| 亚洲精品资源美女情侣酒店| 亚洲国产精品视频| 亚洲激情二区| 日韩网站在线观看| 99热在这里有精品免费| 日韩视频免费观看高清完整版| 亚洲人成在线免费观看| 亚洲片在线观看| 亚洲精选视频在线| 一本大道av伊人久久综合| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲在线中文字幕| 亚洲男人天堂2024| 欧美一区二区三区在线观看视频| 久久aⅴ乱码一区二区三区| 久久精品30| 久久久综合网站| 另类成人小视频在线| 欧美大秀在线观看| 亚洲精品偷拍| 亚洲图色在线| 久久国产精品免费一区| 久久综合狠狠综合久久综合88| 欧美成人r级一区二区三区| 欧美激情一区二区三区全黄| 欧美区在线播放| 国产精品永久在线| 在线日韩精品视频| av成人国产| 久久久精品国产一区二区三区| 久久夜色精品国产噜噜av| 亚洲电影激情视频网站| 亚洲视频精选| 久久男人资源视频| 欧美激情在线播放| 国产日本欧美一区二区| 亚洲国产天堂久久综合网| 99精品国产热久久91蜜凸| 欧美在线播放一区二区| 欧美sm视频| 亚洲一级电影| 牛夜精品久久久久久久99黑人| 欧美揉bbbbb揉bbbbb| 国产综合在线看| 99国产精品久久久久久久久久| 午夜欧美不卡精品aaaaa| 欧美 日韩 国产在线| 亚洲神马久久| 欧美刺激性大交免费视频| 国产日韩久久| 一区二区免费在线观看| 久久字幕精品一区| 在线视频亚洲一区| 欧美成年人视频网站| 国产日韩欧美高清免费| 一区二区成人精品| 你懂的国产精品永久在线| 亚洲一区二区在线| 免费91麻豆精品国产自产在线观看| 国产精品av一区二区| 亚洲精品视频免费| 久久久久久久一区二区三区| 日韩视频一区二区| 免费久久99精品国产自在现线| 国产精品综合久久久| 亚洲色在线视频| 亚洲国产精品毛片| 久久免费高清视频| 国产婷婷精品| 欧美伊人久久久久久午夜久久久久 | 亚洲欧美一区二区三区久久| 欧美国产精品中文字幕| 欲色影视综合吧| 欧美诱惑福利视频| 亚洲视频在线观看| 欧美日韩视频在线第一区| 亚洲欧洲精品一区| 欧美激情自拍| 老牛影视一区二区三区| 影音先锋成人资源站| 久久国产精品99国产精| 亚洲女女女同性video| 欧美揉bbbbb揉bbbbb| 一区二区三区久久| 亚洲精品一区二区在线观看| 免费成人av在线看| 最近中文字幕日韩精品 | 久久亚裔精品欧美| 久久国产精品久久久久久久久久| 国产欧美一区在线| 久久久久99精品国产片| 久久成人av少妇免费| 激情五月***国产精品| 欧美 日韩 国产精品免费观看| 久久人人爽人人| 亚洲国产一二三| 亚洲三级影院| 欧美视频日韩视频在线观看| 亚洲影院免费观看|