欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

3D 圖形編程的數(shù)學(xué)基礎(chǔ)(1) 向量及其運(yùn)算

系統(tǒng) 1956 0

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

討論新聞組及文件

說明

因?yàn)榇髮W(xué)時(shí)在高等數(shù)學(xué)課程中學(xué)習(xí)過線性代數(shù)相關(guān)的內(nèi)容,所以學(xué)習(xí)3D編程的時(shí)候這一段事實(shí)上是跳過去了,學(xué)習(xí)到某些內(nèi)容的時(shí)候覺得很郁悶,(4,5年沒有用了,難免忘掉)最后常常依靠高級API完成,但是事實(shí)上這些高級API的算法具體實(shí)現(xiàn)啥的基本看不懂,于是還是決定回來好好的將基礎(chǔ)部分弄明白,當(dāng)然,首先是數(shù)學(xué)部分。為了更好的達(dá)到直觀的效果,還有在復(fù)雜矩陣運(yùn)算的時(shí)候驗(yàn)證運(yùn)算結(jié)果,將引入freemat或者scilab(5.1.1)或者GNU Octave(3.2.3)的使用,將此三個(gè)軟件作為matlab的替代品來使用。不能用龐大的matlab也是種解脫,默認(rèn)使用freemat,不行的時(shí)候考慮其他替代。具體牽涉到計(jì)算的時(shí)盡量實(shí)現(xiàn)DirectX與Irrlicht兩個(gè)版本,也會參考部分源代碼。(主要用于看看公式用C/C++的實(shí)現(xiàn))基本上,我希望能以概念的講解為主,最好是直觀的講解。

向量

只用大小就能表示的量叫數(shù)量,比如溫度,質(zhì)量等。既需要用大小表示,同時(shí)還要指明方向的量叫向量,比如位移,速度等。幾何學(xué)中,我們用有向線段來表示向量。有兩個(gè)變量可以確定一個(gè)向量,即向量的長度和向量的方向。量與位置無關(guān),有相同長度和方向的兩個(gè)向量是相等的。在irrlicht中有專門的類vector2d,vector3d分別來表示2維的,3維的向量。在DirectX中用于表示向量的是結(jié)構(gòu)D3DXVECTOR2,D3DXVECTOR3,D3DXVECTOR4。

左右手坐標(biāo)系

一圖勝前言,不懂怎么用手扭曲的去比劃的看看圖,就明白啥是左手,啥是右手坐標(biāo)系了。在OpenGL中使用的是右手坐標(biāo)系,DirectX,Irrlicht中使用的是左手坐標(biāo)系。(圖片來自于網(wǎng)絡(luò))

image

向量的模

向量的大小(或長度)稱為向量的模,向量a的模記為||a||。下面以3維的向量(3D中用的最多)為例: abc2_html_8d5f713

在irrlicht中獲取向量模的函數(shù)是vector3d的成員函數(shù)

    
      //! Get length of the vector.

    
    
      T getLength
    
    () 
    
      const 
    
    { 
    
      return 
    
    
      core
    
    ::
    
      squareroot
    
    ( 
    
      X
    
    *
    
      X 
    
    + 
    
      Y
    
    *
    
      Y 
    
    + 
    
      Z
    
    *
    
      Z 
    
    ); }


    
      //! Get squared length of the vector.
/** This is useful because it is much faster than getLength().
/return Squared length of the vector. */

    
    
      T getLengthSQ
    
    () 
    
      const 
    
    { 
    
      return 
    
    
      X
    
    *
    
      X 
    
    + 
    
      Y
    
    *
    
      Y 
    
    + 
    
      Z
    
    *
    
      Z
    
    ; }
  

可以看出公式的實(shí)現(xiàn),其中g(shù)etLengthSQ用于某些時(shí)候使用不開根號,直接使用平方值的方法來優(yōu)化代碼。

DirectX中的實(shí)現(xiàn)差不多一樣,只是使用的是C風(fēng)格的接口沒有使用C++的類而已。

    
      D3DXINLINE FLOAT D3DXVec3Length
    
    
    ( 
    
      CONST D3DXVECTOR3 
    
    *
    
      pV 
    
    )
{

    
      #ifdef 
    
    
      D3DX_DEBUG
    
    
    
      if(!pV)
        return 0.0f;

    
    
      #endif

#ifdef 
    
    
      __cplusplus
    
    
    
      return 
    
    
      sqrtf
    
    (
    
      pV
    
    ->
    
      x 
    
    * 
    
      pV
    
    ->
    
      x 
    
    + 
    
      pV
    
    ->
    
      y 
    
    * 
    
      pV
    
    ->
    
      y 
    
    + 
    
      pV
    
    ->
    
      z 
    
    * 
    
      pV
    
    ->
    
      z
    
    );

    
      #else
    
    
    
      return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z);

    
    
      #endif

    
    }


    
      D3DXINLINE FLOAT D3DXVec3LengthSq
    
    
    ( 
    
      CONST D3DXVECTOR3 
    
    *
    
      pV 
    
    )
{

    
      #ifdef 
    
    
      D3DX_DEBUG
    
    
    
      if(!pV)
        return 0.0f;

    
    
      #endif

    return 
    
    
      pV
    
    ->
    
      x 
    
    * 
    
      pV
    
    ->
    
      x 
    
    + 
    
      pV
    
    ->
    
      y 
    
    * 
    
      pV
    
    ->
    
      y 
    
    + 
    
      pV
    
    ->
    
      z 
    
    * 
    
      pV
    
    ->
    
      z
    
    ;
}
  

FreeMat:

            --> a = [1, 1, 1]
a =
 1 1 1
--> b = norm(a)
b =
    1.7321
--> 
          

三維空間中兩點(diǎn)的距離

公式: abc4_html_m257962b9

Irrlicht的實(shí)現(xiàn):

    
      //! Get distance from another point.
/** Here, the vector is interpreted as point in 3 dimensional space. */

    
    
      T getDistanceFrom
    
    (
    
      const 
    
    
      vector3d
    
    <
    
      T
    
    >& 
    
      other
    
    ) 
    
      const

    
    {
    
    
      return 
    
    
      vector3d
    
    <
    
      T
    
    >(
    
      X 
    
    - 
    
      other
    
    .
    
      X
    
    , 
    
      Y 
    
    - 
    
      other
    
    .
    
      Y
    
    , 
    
      Z 
    
    - 
    
      other
    
    .
    
      Z
    
    ).
    
      getLength
    
    ();
}


    
      //! Returns squared distance from another point.
/** Here, the vector is interpreted as point in 3 dimensional space. */

    
    
      T getDistanceFromSQ
    
    (
    
      const 
    
    
      vector3d
    
    <
    
      T
    
    >& 
    
      other
    
    ) 
    
      const

    
    {
    
    
      return 
    
    
      vector3d
    
    <
    
      T
    
    >(
    
      X 
    
    - 
    
      other
    
    .
    
      X
    
    , 
    
      Y 
    
    - 
    
      other
    
    .
    
      Y
    
    , 
    
      Z 
    
    - 
    
      other
    
    .
    
      Z
    
    ).
    
      getLengthSQ
    
    ();
}
  

也有平方的SQ函數(shù)版本。

向量的規(guī)范化

向量的規(guī)范化也稱(歸一化)就是使向量的模變?yōu)?,即變?yōu)閱挝幌蛄俊?梢酝ㄟ^將向量都除以該向量的模來實(shí)現(xiàn)向量的規(guī)范化。規(guī)范化后的向量相當(dāng)于與向量同方向的單位向量,可以用它表示向量的方向。由于方向的概念在3D編程中非常重要,所以此概念也很重要,單位向量有很多重要的性質(zhì),在表示物體表面的法線向量時(shí)用的更是頻繁。

基本的公式: clip_image002

在irrlicht中的調(diào)用函數(shù)及實(shí)現(xiàn):

    
      //! Normalizes the vector.
/** In case of the 0 vector the result is still 0, otherwise
the length of the vector will be 1.
/return Reference to this vector after normalization. */

    
    
      vector3d
    
    <
    
      T
    
    >& 
    
      normalize
    
    ()
{
    
    
      f64 length 
    
    = (
    
      f32
    
    )(
    
      X
    
    *
    
      X 
    
    + 
    
      Y
    
    *
    
      Y 
    
    + 
    
      Z
    
    *
    
      Z
    
    );
    
    
      if 
    
    (
    
      core
    
    ::
    
      equals
    
    (
    
      length
    
    , 0.0)) 
    
      // this check isn't an optimization but prevents getting NAN in the sqrt.
        
    
    
      return 
    
    *
    
      this
    
    ;
    
    
      length 
    
    = 
    
      core
    
    ::
    
      reciprocal_squareroot 
    
    ( (
    
      f64
    
    ) (
    
      X
    
    *
    
      X 
    
    + 
    
      Y
    
    *
    
      Y 
    
    + 
    
      Z
    
    *
    
      Z
    
    ) );

    
    
      X 
    
    = (
    
      T
    
    )(
    
      X 
    
    * 
    
      length
    
    );
    
    
      Y 
    
    = (
    
      T
    
    )(
    
      Y 
    
    * 
    
      length
    
    );
    
    
      Z 
    
    = (
    
      T
    
    )(
    
      Z 
    
    * 
    
      length
    
    );
    
    
      return 
    
    *
    
      this
    
    ;
}
  

上述代碼中首先計(jì)算length以防其為0,然后直接計(jì)算1/||u||,(這樣做的目的從代碼實(shí)現(xiàn)上來看是因?yàn)镾SE,Nviadia都有可以直接計(jì)算此值的能力) 然后再分別與各坐標(biāo)值進(jìn)行乘法運(yùn)算。

DirectX中的調(diào)用函數(shù):(無實(shí)現(xiàn)可看)

    
      D3DXVECTOR3
    
    * 
    
      WINAPI D3DXVec3Normalize
    
    
    ( 
    
      D3DXVECTOR3 
    
    *
    
      pOut
    
    , 
    
      CONST D3DXVECTOR3 
    
    *
    
      pV 
    
    );
  
  
  
  

向量的加減法,數(shù)乘

太簡單,不多描述,無非就是對應(yīng)的加,減,乘罷了,幾何意義講一下,加法可以看做是兩個(gè)向量綜合后的方向,減法可以看做兩個(gè)向量的差異方向(甚至可以用于追蹤算法),數(shù)乘用于對向量進(jìn)行縮放。

為了完整,這里從 百度百科 拷貝一段資料過來:(以下都是2維的,放到3維也差不多)

設(shè) a =(x,y), b =(x',y')。

1、向量的加法


向量的加法滿足平行四邊形法則和三角形法則。

AB + BC = AC

a + b =(x+x',y+y')。

a + 0 = 0 + a = a。

向量加法的運(yùn)算律:

交換律: a + b = b + a;

結(jié)合律:( a + b )+ c = a +( b + c )。

2、向量的減法


如果 a b 是互為相反的向量,那么 a =- b b =- a a + b = 0. 0 的反向量為 0

AB - AC = CB. 即“共同起點(diǎn),指向被減”

a =(x,y) b =(x',y') 則 a - b =(x-x',y-y').

3、數(shù)乘向量


實(shí)數(shù)λ和向量 a 的乘積是一個(gè)向量,記作λ a ,且∣λa∣=∣λ∣ · ∣a∣。

當(dāng)λ>0時(shí),λ a a 同方向;

當(dāng)λ<0時(shí),λ a a 反方向;

當(dāng)λ=0時(shí),λ a = 0 ,方向任意。

當(dāng) a = 0 時(shí),對于任意實(shí)數(shù)λ,都有λ a = 0

注:按定義知,如果λ a = 0 ,那么λ=0或 a = 0

實(shí)數(shù)λ叫做向量 a 的系數(shù),乘數(shù)向量λ a 的幾何意義就是將表示向量 a 的有向線段伸長或壓縮。

當(dāng)∣λ∣>1時(shí),表示向量a的有向線段在原方向(λ>0)或反方向(λ<0)上伸長為原來的∣λ∣倍;

當(dāng)∣λ∣<1時(shí),表示向量a的有向線段在原方向(λ>0)或反方向(λ<0)上縮短為原來的∣λ∣倍。

數(shù)與向量的乘法滿足下面的運(yùn)算律

結(jié)合律:(λ a ) ·b =λ( a · b) =( a ·λ b )。

向量對于數(shù)的分配律(第一分配律):(λ+μ) a a a.

數(shù)對于向量的分配律(第二分配律):λ( a + b )=λ a b.

數(shù)乘向量的消去律:① 如果實(shí)數(shù)λ≠0且λ a= λ b ,那么 a=b 。② 如果 a 0 且λ a= μ a ,那么λ = μ。

點(diǎn)積(dot product)又稱數(shù)量積或內(nèi)積

v0 . v1 = v0.x*v1.x+v0.y*v1.y+v0.z*v1.z;
所以向量的點(diǎn)積結(jié)果是一個(gè)數(shù),而非向量。
點(diǎn)積等于向量v0的長度乘以v1的長度,再乘以它們之間夾角的余弦,即|v0|*|v1|*cos(θ).
通過點(diǎn)積,可以計(jì)算兩個(gè)向量之間的夾角。
cos(θ)=v0.v1/|v0||v1|;
θ=Math.acos(v0.v1/|v0||v1|);
如果兩個(gè)向量都是單位向量,上面的公式可以簡化為
θ=Math.acos(v0.v1);
V0.v1=0 =》兩個(gè)向量互相垂直
V0.v1>0 =》兩個(gè)向量的夾角小于90度
V0.v1<0 =》兩個(gè)向量的夾角大于90度

Irrlicht中的實(shí)現(xiàn):(很簡單的公式,很直白的實(shí)現(xiàn))

    
      //! Get the dot product with another vector.

    
    
      T dotProduct
    
    (
    
      const 
    
    
      vector3d
    
    <
    
      T
    
    >& 
    
      other
    
    ) 
    
      const

    
    {
    
    
      return 
    
    
      X
    
    *
    
      other
    
    .
    
      X 
    
    + 
    
      Y
    
    *
    
      other
    
    .
    
      Y 
    
    + 
    
      Z
    
    *
    
      other
    
    .
    
      Z
    
    ;
}
  

DirectX中的實(shí)現(xiàn):(很簡單的公式,也是很直白的實(shí)現(xiàn))

    
      D3DXINLINE FLOAT D3DXVec3Dot
    
    
    ( 
    
      CONST D3DXVECTOR3 
    
    *
    
      pV1
    
    , 
    
      CONST D3DXVECTOR3 
    
    *
    
      pV2 
    
    )
{

    
      #ifdef 
    
    
      D3DX_DEBUG
    
    
    
      if(!pV1 || !pV2)
        return 0.0f;

    
    
      #endif

    return 
    
    
      pV1
    
    ->
    
      x 
    
    * 
    
      pV2
    
    ->
    
      x 
    
    + 
    
      pV1
    
    ->
    
      y 
    
    * 
    
      pV2
    
    ->
    
      y 
    
    + 
    
      pV1
    
    ->
    
      z 
    
    * 
    
      pV2
    
    ->
    
      z
    
    ;
}
  
  
  
  

叉積(cross product):也稱向量積

叉積的結(jié)果是一個(gè)向量,該向量垂直于相乘的兩個(gè)向量。

公式: yyyy_html_1b72d65e

注意:叉積不滿足交換律,反過來相乘得到的向量與原向量方向相反。
左手坐標(biāo)系可以通過左手法則來確定叉積返回的向量的方向,從第一個(gè)向量向第二個(gè)向量彎曲左手,這是拇指所指的方向就是求得的向量的方向。右手坐標(biāo)系同樣的,可以通過右手法則來確定叉積返回的向量的方向,從第一個(gè)向量向第二個(gè)向量彎曲右手,這是拇指所指的方向就是求得的向量的方向。因此,事實(shí)上叉積獲得的向量總是垂直于原來兩個(gè)向量所在的平面。
如果兩個(gè)向量方向相同或相反,叉積結(jié)果將是一個(gè)零向量。(即a//b)
叉乘的一個(gè)重要應(yīng)用就是求三角形的法向量。

Irrlicht的實(shí)現(xiàn):

    
      //! Calculates the cross product with another vector.
/** /param p Vector to multiply with.
/return Crossproduct of this vector with p. */

    
    
      vector3d
    
    <
    
      T
    
    > 
    
      crossProduct
    
    (
    
      const 
    
    
      vector3d
    
    <
    
      T
    
    >& 
    
      p
    
    ) 
    
      const

    
    {
    
    
      return 
    
    
      vector3d
    
    <
    
      T
    
    >(
    
      Y 
    
    * 
    
      p
    
    .
    
      Z 
    
    - 
    
      Z 
    
    * 
    
      p
    
    .
    
      Y
    
    , 
    
      Z 
    
    * 
    
      p
    
    .
    
      X 
    
    - 
    
      X 
    
    * 
    
      p
    
    .
    
      Z
    
    , 
    
      X 
    
    * 
    
      p
    
    .
    
      Y 
    
    - 
    
      Y 
    
    * 
    
      p
    
    .
    
      X
    
    );
}
  

DirectX的實(shí)現(xiàn):

    
      D3DXINLINE D3DXVECTOR3
    
    * 
    
      D3DXVec3Cross
    
    
    ( 
    
      D3DXVECTOR3 
    
    *
    
      pOut
    
    , 
    
      CONST D3DXVECTOR3 
    
    *
    
      pV1
    
    , 
    
      CONST D3DXVECTOR3 
    
    *
    
      pV2 
    
    )
{
    
    
      D3DXVECTOR3 v
    
    ;


    
      #ifdef 
    
    
      D3DX_DEBUG
    
    
    
      if(!pOut || !pV1 || !pV2)
        return NULL;

    
    
      #endif

    
    
    
      v
    
    .
    
      x 
    
    = 
    
      pV1
    
    ->
    
      y 
    
    * 
    
      pV2
    
    ->
    
      z 
    
    - 
    
      pV1
    
    ->
    
      z 
    
    * 
    
      pV2
    
    ->
    
      y
    
    ;
    
    
      v
    
    .
    
      y 
    
    = 
    
      pV1
    
    ->
    
      z 
    
    * 
    
      pV2
    
    ->
    
      x 
    
    - 
    
      pV1
    
    ->
    
      x 
    
    * 
    
      pV2
    
    ->
    
      z
    
    ;
    
    
      v
    
    .
    
      z 
    
    = 
    
      pV1
    
    ->
    
      x 
    
    * 
    
      pV2
    
    ->
    
      y 
    
    - 
    
      pV1
    
    ->
    
      y 
    
    * 
    
      pV2
    
    ->
    
      x
    
    ;

    *
    
      pOut 
    
    = 
    
      v
    
    ;
    
    
      return 
    
    
      pOut
    
    ;
}
  
基本上也就是按公式來了。

作為最后一個(gè)概念,這里用代碼實(shí)踐一下。

求a=(2,2,1)和b=(4,5,3)的叉積。

freemat:

            --> a = [2,2,1]
a =
 2 2 1
--> b = [4,5,3]
b =
 4 5 3
--> c = cross(a,b)
c =
  1 -2  2
--> 
          

Irrlicht:

    
      #include 
    
    
      <stdio.h>

    
    
      #include 
    
    
      <irrlicht.h>

    
    
      using namespace 
    
    
      irr
    
    ::
    
      core
    
    ;



    
      int 
    
    
      _tmain
    
    (
    
      int 
    
    
      argc
    
    , 
    
      _TCHAR
    
    * 
    
      argv
    
    [])
{
    
    
      vector3df a
    
    (2.0f, 2.0f, 1.0f);
    
    
      vector3df b
    
    (4.0f, 5.0f, 3.0f);

    
    
      vector3df c 
    
    = 
    
      a
    
    .
    
      crossProduct
    
    (
    
      b
    
    );

    
    
      printf
    
    (
    
      "c = (%f, %f, %f)"
    
    , 
    
      c
    
    .
    
      X
    
    , 
    
      c
    
    .
    
      Y
    
    , 
    
      c
    
    .
    
      Z
    
    );


    
    
      return 
    
    0;
}
  

輸出:

c = (1.000000, -2.000000, 2.000000)

DirectX:

    
      #include 
    
    
      <stdio.h>

    
    
      #include 
    
    
      <d3dx9.h>


    
    
      int 
    
    
      _tmain
    
    (
    
      int 
    
    
      argc
    
    , 
    
      _TCHAR
    
    * 
    
      argv
    
    [])
{
    
    
      D3DXVECTOR3 a
    
    (2.0f, 2.0f, 1.0f);
    
    
      D3DXVECTOR3 b
    
    (4.0f, 5.0f, 3.0f);

    
    
      D3DXVECTOR3 c
    
    ;
    
    
      D3DXVec3Cross
    
    (&
    
      c
    
    , &
    
      a
    
    , &
    
      b
    
    );

    
    
      printf
    
    (
    
      "c = (%f, %f, %f)"
    
    , 
    
      c
    
    .
    
      x
    
    , 
    
      c
    
    .
    
      y
    
    , 
    
      c
    
    .
    
      z
    
    );

    
    
      return 
    
    0;
}
  

輸出:

c = (1.000000, -2.000000, 2.000000)

這里給出個(gè)較為完整的例子是希望大家了解一下Irrlicht這種C++風(fēng)格的接口及DirectX的C風(fēng)格接口使用上的不同,這里就不對兩種風(fēng)格的接口提出更多評論了,以防引起口水戰(zhàn)。

下一篇預(yù)計(jì)講矩陣的計(jì)算

參考資料:

1.《DirectX 9.0 3D游戲開發(fā)編程基礎(chǔ)》 ,(美)Frank D.Luna著,段菲譯,清華大學(xué)出版社

2.《大學(xué)數(shù)學(xué)》湖南大學(xué)數(shù)學(xué)與計(jì)量經(jīng)濟(jì)學(xué)院組編,高等教育出版社

3.百度百科及wikipedia

原創(chuàng)文章作者保留版權(quán) 轉(zhuǎn)載請注明原作者 并給出鏈接

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

<script type="text/javascript">var sitebro_tracker_atc_kw = {u:'http://www.sitebot.com.cn/754892/',w:'NzU0ODky',bt:'#804000',bg:'#EEEEDD',fs:1,ca:'#770000',bh:'#f4f4c6',cp:'',l:10,s:1,lang:'zh_CN'};</script><script type="text/javascript" src="http://www.sitebot.com.cn/js/widget_track2/tracker_atc_kw.js"></script><script type="text/javascript"><!-- var sitebro_tracker_atc={u:'http://www.sitebot.com.cn/754892/',w:'NzU0ODky',bt:'#804000',bg:'#EEEEDD',cf:'#ffffff',ca:'#770000',bh:'#DDDDCC',cp:'%E6%9C%AC%E7%AB%99%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0',l:10,s:0,lang:'zh_CN'}; // --></script><script src="http://www.sitebot.com.cn/js/widget_track2/tracker_atc.js" type="text/javascript"></script>

3D 圖形編程的數(shù)學(xué)基礎(chǔ)(1) 向量及其運(yùn)算


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本不卡免费新一二三区 | 特级黄色小说 | 欧美日韩在线免费 | 国产中文欧美 | 日本黄色小视频在线观看 | 黄桃av | 色综合激情 | 欧洲男女下面进出的视频 | 欧美视频精品 | 免费高清av | 91久久亚洲国产成人精品性色 | 国产一区二区三区乱码 | 久久久av | 午夜视频在线免费观看 | 国产午夜视频 | 欧美日韩专区国产精品 | 色哟哟国产成人精品 | 日韩成人| 国产人成精品综合欧美成人 | 久久国产色 | 伦理一区二区 | 在线亚洲精品 | 正在播放国产无套露脸 | 黄视频网站在线 | www.天堂av.com | 在线日韩欧美 | 99久久久久久国产精品 | 亚洲免费a | 涩涩色中文综合亚洲 | 国产成人羞羞视频在线 | 97理论三级九七午夜在线观看 | 99青草青草久热精品视频 | 久久亚洲美女 | 精品国产三级 | 国产精品久久人妻无码网站一区无 | 久久国产精品久久精品国产 | 先锋影音资源网站 | 91亚洲国产成人精品性色 | 嫩草网站 | 亚洲午夜视频在线观看 | 色综合久久88色综合天天 |