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

天行健 君子當(dāng)自強(qiáng)而不息

DXUT源碼分析 ---- 類CDXUTMesh(4)

第三類是設(shè)置渲染選項(xiàng)函數(shù)。其中UseMeshMaterials()函數(shù)用于設(shè)置是否使用網(wǎng)格模型自身的材質(zhì)和紋理進(jìn)行渲染,如果調(diào)用該函數(shù)并將參數(shù)m_bUseMaterials設(shè)置為TRUE,則在渲染時(shí)使用網(wǎng)格模型自身的材質(zhì)和紋理,這也是默認(rèn)資源,如果將參數(shù)m_bUseMaterials設(shè)置為FALSE,則在渲染時(shí)不使用網(wǎng)格模型自身的材質(zhì)和紋理,自然就使用當(dāng)前為Direct3D設(shè)置的材質(zhì)和紋理渲染網(wǎng)格模型。

void UseMeshMaterials( bool bFlag ) { m_bUseMaterials = bFlag; }

 

SetFVF()函數(shù)將網(wǎng)格模型克隆為參數(shù)dwFVF指定的靈活頂點(diǎn)格式:

HRESULT CDXUTMesh::SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF )
{
LPD3DXMESH pTempMesh = NULL;
    if( m_pMesh )
{
if( FAILED( m_pMesh->CloneMeshFVF( m_pMesh->GetOptions(), dwFVF, pd3dDevice, &pTempMesh ) ) )
{
SAFE_RELEASE( pTempMesh );
return E_FAIL;
}
        DWORD dwOldFVF = 0;
dwOldFVF = m_pMesh->GetFVF();
        SAFE_RELEASE( m_pMesh );
m_pMesh = pTempMesh;
        // Compute normals if they are being requested and the old mesh does not have them.
if( !(dwOldFVF & D3DFVF_NORMAL) && (dwFVF & D3DFVF_NORMAL) )
D3DXComputeNormals( m_pMesh, NULL );
}
    return S_OK;
}

代碼相當(dāng)簡潔明了,這里只對函數(shù)D3DXComputeNormals()進(jìn)行說明:

Computes unit normals for each vertex in a mesh. Provided to support legacy applications. Use D3DXComputeTangentFrameEx for better results.

HRESULT D3DXComputeNormals(
LPD3DXBASEMESH pMesh,
CONST DWORD * pAdjacency
);

Parameters

pMesh
[in, out] Pointer to an ID3DXBaseMesh interface, representing the normalized mesh object. This function may not take an ID3DXPMesh progressive mesh as input.
pAdjacency
[in] Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the created progressive mesh. This parameter is optional and should be set to NULL if it is unused.

Return Values

If the function succeeds, the return value is S_OK. If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

Remarks

The input mesh must have the D3DFVF_NORMAL flag specified in its flexible vertex format (FVF).

A normal for a vertex is generated by averaging the normals of all faces that share that vertex.

If adjacency is provided, replicated vertices are ignored and "smoothed" over. If adjacency is not provided, replicated vertices will have normals averaged in from only the faces explicitly referencing them.

This function simply calls D3DXComputeTangentFrameEx with the following input parameters:

D3DXComputeTangentFrameEx( pMesh,
D3DX_DEFAULT,
0,
D3DX_DEFAULT,
0,
D3DX_DEFAULT,
0,
D3DDECLUSAGE_NORMAL,
0,
D3DXTANGENT_GENERATE_IN_PLACE | D3DXTANGENT_CALCULATE_NORMALS,
pAdjacency,
-1.01f,
-0.01f,
-1.01f,
NULL,
NULL);

函數(shù)SetVertexDecl()的功能與SetFVF()類似,只是SetVertexDecl()用于可編程流水線:

//-----------------------------------------------------------------------------
// Convert the mesh to the format specified by the given vertex declarations.
//-----------------------------------------------------------------------------
HRESULT CDXUTMesh::SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9 *pDecl, 
                                  
bool bAutoComputeNormals, bool bAutoComputeTangents, 
                                  
bool bSplitVertexForOptimalTangents )
{
    LPD3DXMESH pTempMesh 
= NULL;

    
if( m_pMesh )
    {
        
if( FAILED( m_pMesh->CloneMesh( m_pMesh->GetOptions(), pDecl, pd3dDevice, &pTempMesh ) ) )
        {
            SAFE_RELEASE( pTempMesh );
            
return E_FAIL;
        }
    }

    
// Check if the old declaration contains a normal.

    
bool bHadNormal = false;
    
bool bHadTangent = false;

    D3DVERTEXELEMENT9 aOldDecl[MAX_FVF_DECL_SIZE];

    
if( m_pMesh && SUCCEEDED( m_pMesh->GetDeclaration( aOldDecl ) ) )
    {
        
for( UINT index = 0; index < D3DXGetDeclLength( aOldDecl ); ++index )
        {
            
if( aOldDecl[index].Usage == D3DDECLUSAGE_NORMAL )           
                bHadNormal 
= true;
           
            
if( aOldDecl[index].Usage == D3DDECLUSAGE_TANGENT )           
                bHadTangent 
= true;           
        }
    }

    
// Check if the new declaration contains a normal.

    
bool bHaveNormalNow = false;
    
bool bHaveTangentNow = false;

    D3DVERTEXELEMENT9 aNewDecl[MAX_FVF_DECL_SIZE];

    
if( pTempMesh && SUCCEEDED( pTempMesh->GetDeclaration( aNewDecl ) ) )
    {
        
for( UINT index = 0; index < D3DXGetDeclLength( aNewDecl ); ++index )
        {
            
if( aNewDecl[index].Usage == D3DDECLUSAGE_NORMAL )
                bHaveNormalNow 
= true;

            
if( aNewDecl[index].Usage == D3DDECLUSAGE_TANGENT )            
                bHaveTangentNow 
= true;            
        }
    }

    SAFE_RELEASE( m_pMesh );

    
if( pTempMesh )
    {
        m_pMesh 
= pTempMesh;

        
if!bHadNormal && bHaveNormalNow && bAutoComputeNormals )
        {
            
// Compute normals in case the meshes have them
            D3DXComputeNormals( m_pMesh, NULL );
        }

        
if( bHaveNormalNow && !bHadTangent && bHaveTangentNow && bAutoComputeTangents )
        {
            ID3DXMesh
* pNewMesh;
            HRESULT hr;

            DWORD 
*rgdwAdjacency = NULL;

            rgdwAdjacency 
= new DWORD[m_pMesh->GetNumFaces() * 3];
            
if( rgdwAdjacency == NULL )
                
return E_OUTOFMEMORY;

            V( m_pMesh
->GenerateAdjacency(1e-6f, rgdwAdjacency) );

            
float fPartialEdgeThreshold;
            
float fSingularPointThreshold;
            
float fNormalEdgeThreshold;

            
if( bSplitVertexForOptimalTangents )
            {
                fPartialEdgeThreshold   
= 0.01f;
                fSingularPointThreshold 
= 0.25f;
                fNormalEdgeThreshold    
= 0.01f;
            }
            
else
            {
                fPartialEdgeThreshold   
= -1.01f;
                fSingularPointThreshold 
= 0.01f;
                fNormalEdgeThreshold    
= -1.01f;
            }

            
// Compute tangents, which are required for normal mapping
            hr = D3DXComputeTangentFrameEx( m_pMesh, 
                                            D3DDECLUSAGE_TEXCOORD, 
0
                                            D3DDECLUSAGE_TANGENT, 
0,
                                            D3DX_DEFAULT, 
0
                                            D3DDECLUSAGE_NORMAL, 
0,
                                            
0, rgdwAdjacency, 
                                            fPartialEdgeThreshold, fSingularPointThreshold, fNormalEdgeThreshold, 
                                            
&pNewMesh, NULL );

            SAFE_DELETE_ARRAY( rgdwAdjacency );
            
if( FAILED(hr) )
                
return hr;

            SAFE_RELEASE( m_pMesh );
            m_pMesh 
= pNewMesh;
        }
    }

    
return S_OK;
}

 

函數(shù)首先調(diào)用CloneMesh()以指定的頂點(diǎn)聲明方式來克隆網(wǎng)格模型:
    LPD3DXMESH pTempMesh = NULL;
    if( m_pMesh )
{
if( FAILED( m_pMesh->CloneMesh( m_pMesh->GetOptions(), pDecl, pd3dDevice, &pTempMesh ) ) )
{
SAFE_RELEASE( pTempMesh );
return E_FAIL;
}
}

接下來檢查原網(wǎng)格中是否包含法線和切線信息:

    // Check if the old declaration contains a normal.
    bool bHadNormal = false;
bool bHadTangent = false;
    D3DVERTEXELEMENT9 aOldDecl[MAX_FVF_DECL_SIZE];
    if( m_pMesh && SUCCEEDED( m_pMesh->GetDeclaration( aOldDecl ) ) )
{
for( UINT index = 0; index < D3DXGetDeclLength( aOldDecl ); ++index )
{
if( aOldDecl[index].Usage == D3DDECLUSAGE_NORMAL )
bHadNormal = true;
            if( aOldDecl[index].Usage == D3DDECLUSAGE_TANGENT )           
bHadTangent = true;
}
}

再接下來檢查克隆后的網(wǎng)格模型中是否包含法線和切線信息:

    // Check if the new declaration contains a normal.
    bool bHaveNormalNow = false;
bool bHaveTangentNow = false;
    D3DVERTEXELEMENT9 aNewDecl[MAX_FVF_DECL_SIZE];
    if( pTempMesh && SUCCEEDED( pTempMesh->GetDeclaration( aNewDecl ) ) )
{
for( UINT index = 0; index < D3DXGetDeclLength( aNewDecl ); ++index )
{
if( aNewDecl[index].Usage == D3DDECLUSAGE_NORMAL )
bHaveNormalNow = true;
            if( aNewDecl[index].Usage == D3DDECLUSAGE_TANGENT )            
bHaveTangentNow = true;
}
}

如果原網(wǎng)格中不包含法線信息,同時(shí)克隆后的網(wǎng)格模型中要求包含法線信息,且參數(shù)bAutoComputeNormals被設(shè)置為true(即要求自動計(jì)算法線),則調(diào)用D3DXComputeNormals()計(jì)算法線:

    SAFE_RELEASE( m_pMesh );
    if( pTempMesh )
{
m_pMesh = pTempMesh;
        if( !bHadNormal && bHaveNormalNow && bAutoComputeNormals )
{
// Compute normals in case the meshes have them
D3DXComputeNormals( m_pMesh, NULL );
}

如果原網(wǎng)格中不包含切線信息,同時(shí)克隆后的網(wǎng)格模型中要求包含切線信息,且參數(shù)bAutoComputeTangents被設(shè)置為true(即要求自動計(jì)算切線),則首先調(diào)用GenerateAdjacency()生成網(wǎng)格面鄰接信息,并調(diào)用D3DXComputeTangentFrameEx()來計(jì)算網(wǎng)格面切線:

        if( bHaveNormalNow && !bHadTangent && bHaveTangentNow && bAutoComputeTangents )
{
ID3DXMesh* pNewMesh;
HRESULT hr;
            DWORD *rgdwAdjacency = NULL;
            rgdwAdjacency = new DWORD[m_pMesh->GetNumFaces() * 3];
if( rgdwAdjacency == NULL )
return E_OUTOFMEMORY;
            V( m_pMesh->GenerateAdjacency(1e-6f, rgdwAdjacency) );
            float fPartialEdgeThreshold;
float fSingularPointThreshold;
float fNormalEdgeThreshold;
            if( bSplitVertexForOptimalTangents )
{
fPartialEdgeThreshold = 0.01f;
fSingularPointThreshold = 0.25f;
fNormalEdgeThreshold = 0.01f;
}
else
{
fPartialEdgeThreshold = -1.01f;
fSingularPointThreshold = 0.01f;
fNormalEdgeThreshold = -1.01f;
}
            // Compute tangents, which are required for normal mapping
hr = D3DXComputeTangentFrameEx( m_pMesh,
D3DDECLUSAGE_TEXCOORD, 0,
D3DDECLUSAGE_TANGENT, 0,
D3DX_DEFAULT, 0,
D3DDECLUSAGE_NORMAL, 0,
0, rgdwAdjacency,
fPartialEdgeThreshold, fSingularPointThreshold, fNormalEdgeThreshold,
&pNewMesh, NULL );
            SAFE_DELETE_ARRAY( rgdwAdjacency );
if( FAILED(hr) )
return hr;
            SAFE_RELEASE( m_pMesh );
m_pMesh = pNewMesh;
}

 

D3DXComputeTangentFrameEx()的聲明如下:

Performs tangent frame computations on a mesh. Tangent, binormal, and optionally normal vectors are generated. Singularities are handled as required by grouping edges and splitting vertices.

HRESULT D3DXComputeTangentFrameEx(
ID3DXMesh * pMesh,
DWORD dwTextureInSemantic,
DWORD dwTextureInIndex,
DWORD dwUPartialOutSemantic,
DWORD dwUPartialOutIndex,
DWORD dwVPartialOutSemantic,
DWORD dwVPartialOutIndex,
DWORD dwNormalOutSemantic,
DWORD dwNormalOutIndex,
DWORD dwOptions,
CONST DWORD * pdwAdjacency,
FLOAT fPartialEdgeThreshold,
FLOAT fSingularPointThreshold,
FLOAT fNormalEdgeThreshold,
ID3DXMesh ** ppMeshOut,
ID3DXBuffer ** ppVertexMapping
);

Parameters

pMesh
[in] Pointer to an input ID3DXMesh mesh object.
dwTextureInSemantic
[in] Specifies the texture coordinate input semantic. If D3DX_DEFAULT, the function assumes that there are no texture coordinates, and the function will fail unless normal vector calculation is specified.
dwTextureInIndex
[in] If a mesh has multiple texture coordinates, specifies the texture coordinate to use for the tangent frame computations. If zero, the mesh has only a single texture coordinate.
dwUPartialOutSemantic
[in] Specifies the output semantic for the type, typically D3DDECLUSAGE_TANGENT, that describes where the partial derivative with respect to the U texture coordinate will be stored. If D3DX_DEFAULT, then this partial derivative will not be stored.
dwUPartialOutIndex
[in] Specifies the semantic index at which to store the partial derivative with respect to the U texture coordinate.
dwVPartialOutSemantic
[in] Specifies the D3DDECLUSAGE type, typically D3DDECLUSAGE_BINORMAL, that describes where the partial derivative with respect to the V texture coordinate will be stored. If D3DX_DEFAULT, then this partial derivative will not be stored.
dwVPartialOutIndex
[in] Specifies the semantic index at which to store the partial derivative with respect to the V texture coordinate.
dwNormalOutSemantic
[in] Specifies the output normal semantic, typically D3DDECLUSAGE_NORMAL, that describes where the normal vector at each vertex will be stored. If D3DX_DEFAULT, then this normal vector will not be stored.
dwNormalOutIndex
[in] Specifies the semantic index at which to store the normal vector at each vertex.
dwOptions

Combination of one or more D3DXTANGENT flags that specify tangent frame computation options. If NULL, the following options will be specified:

Description D3DXTANGENT Flag Value
Weight the normal vector length by the angle, in radians, subtended by the two edges leaving the vertex. & !( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL )
Compute orthogonal Cartesian coordinates from texture coordinates (u, v). See Remarks. & !( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V )
Textures are not wrapped in either u or v directions & !( D3DXTANGENT_WRAP_UV )
Partial derivatives with respect to texture coordinates are normalized. & !( D3DXTANGENT_DONT_NORMALIZE_PARTIALS )
Vertices are ordered in a counterclockwise direction around each triangle. & !( D3DXTANGENT_WIND_CW )
Use per-vertex normal vectors already present in the input mesh. & !( D3DXTANGENT_CALCULATE_NORMALS )
 
[in] If D3DXTANGENT_GENERATE_IN_PLACE is not set, the input mesh is cloned. The original mesh must therefore have sufficient space to store the computed normal vector and partial derivative data.

 

pdwAdjacency
[in] Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh. The number of bytes in this array must be at least 3 * ID3DXBaseMesh::GetNumFaces * sizeof(DWORD).
fPartialEdgeThreshold
[in] Specifies the maximum cosine of the angle at which two partial derivatives are deemed to be incompatible with each other. If the dot product of the direction of the two partial derivatives in adjacent triangles is less than or equal to this threshold, then the vertices shared between these triangles will be split.
fSingularPointThreshold
[in] Specifies the maximum magnitude of a partial derivative at which a vertex will be deemed singular. As multiple triangles are incident on a point that have nearby tangent frames, but altogether cancel each other out (such as at the top of a sphere), the magnitude of the partial derivative will decrease. If the magnitude is less than or equal to this threshold, then the vertex will be split for every triangle that contains it.
fNormalEdgeThreshold
[in] Similar to fPartialEdgeThreshold, specifies the maximum cosine of the angle between two normals that is a threshold beyond which vertices shared between triangles will be split. If the dot product of the two normals is less than the threshold, the shared vertices will be split, forming a hard edge between neighboring triangles. If the dot product is more than the threshold, neighboring triangles will have their normals interpolated.
ppMeshOut
[out] Address of a pointer to an output ID3DXMesh mesh object that receives the computed tangent, binormal, and normal vector data.
ppVertexMapping
[out] Address of a pointer to an output ID3DXBuffer buffer object that receives a mapping of new vertices computed by this method to the original vertices. The buffer is an array of DWORDs, with the array size defined as the number of vertices in ppMeshOut.

Return Values

If the function succeeds, the return value is S_OK. If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

Remarks

A simplified version of this function is available as D3DXComputeTangentFrame.

The computed normal vector at each vertex is always normalized to have unit length.

The most robust solution for computing orthogonal Cartesian coordinates is to not set flags D3DXTANGENT_ORTHOGONALIZE_FROM_U and D3DXTANGENT_ORTHOGONALIZE_FROM_V, so that orthogonal coordinates are computed from both texture coordinates u and v. However, in this case, if either u or v is zero, then the function will compute orthogonal coordinates using D3DXTANGENT_ORTHOGONALIZE_FROM_V or D3DXTANGENT_ORTHOGONALIZE_FROM_U, respectively.


posted on 2008-05-31 10:59 lovedday 閱讀(1149) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            免播放器亚洲一区| 宅男噜噜噜66一区二区66| 久久久亚洲国产美女国产盗摄| 女女同性女同一区二区三区91| 欧美一区二区视频在线观看2020| 中日韩美女免费视频网址在线观看| 一区二区三区精品国产| 亚洲性xxxx| 久久狠狠亚洲综合| 久久久久免费视频| 美女视频黄 久久| 欧美xart系列在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 香蕉久久夜色精品| 久久国内精品视频| 欧美人妖在线观看| 国产欧美日韩综合一区在线观看| 国内久久精品视频| 一区二区免费看| 理论片一区二区在线| 日韩天堂在线观看| 久久久精品日韩欧美| 欧美日韩亚洲一区二区三区四区| 国产欧美精品| 一区二区91| 老司机一区二区| 在线一区欧美| 欧美黄色一级视频| 国产综合色精品一区二区三区| 99re6热在线精品视频播放速度| 欧美在线高清| 日韩午夜电影在线观看| 久久综合伊人77777尤物| 国产精品免费观看视频| 亚洲日韩欧美视频一区| 狂野欧美激情性xxxx| 麻豆成人综合网| 亚洲综合久久久久| 欧美日韩国产综合一区二区| 亚洲第一精品电影| 久久久欧美精品| 亚洲视频专区在线| 欧美日韩成人激情| 亚洲黄色免费| 欧美成人精品在线| 久久久久九九九九| 亚洲一区在线免费| 99视频日韩| 欧美黄污视频| 亚洲人在线视频| 免费在线观看精品| 久久精品国产v日韩v亚洲 | 激情久久久久久| 亚洲综合精品自拍| 99这里有精品| 欧美日韩国产综合久久| 亚洲韩国日本中文字幕| 欧美成人精品1314www| 久久精品国产99国产精品澳门| 亚洲精品国产视频| 欧美成年人网| 亚洲大片在线观看| 久久天堂成人| 在线观看日韩av先锋影音电影院| 久久久噜噜噜久久人人看| 新狼窝色av性久久久久久| 国产精品资源| 久久亚洲私人国产精品va| 久久女同精品一区二区| 精品成人a区在线观看| 久久综合图片| 欧美a级在线| 一区二区不卡在线视频 午夜欧美不卡'| 欧美刺激午夜性久久久久久久| 免费视频一区二区三区在线观看| 亚洲精品视频一区二区三区| 日韩亚洲欧美成人一区| 国产精品卡一卡二卡三| 久久久亚洲精品一区二区三区| 久久精品中文| 99re热这里只有精品视频| 一本色道久久综合狠狠躁篇怎么玩 | 国产精自产拍久久久久久| 午夜精品网站| 久久婷婷国产麻豆91天堂| 99re66热这里只有精品3直播| 一区二区三区国产在线| 国产一区二区三区在线观看视频 | 久久琪琪电影院| 日韩亚洲精品视频| 欧美一级大片在线免费观看| 久久aⅴ国产欧美74aaa| 亚洲精品美女在线观看| 这里是久久伊人| 在线观看中文字幕亚洲| 日韩视频专区| 亚洲青色在线| 影音先锋亚洲精品| 国产精品三区www17con| 久久亚洲一区二区三区四区| 欧美国产免费| 久久久999成人| 欧美人成在线视频| 久热re这里精品视频在线6| 欧美日韩在线播放一区二区| 毛片基地黄久久久久久天堂| 国产一区二区成人| 久久精品亚洲| 欧美人与性动交a欧美精品| 亚洲欧美国产三级| 免费在线看一区| 欧美午夜激情视频| 欧美a级片一区| 国产精品高清在线| 亚洲国产精品99久久久久久久久| 国产精品毛片a∨一区二区三区| 免费在线播放第一区高清av| 亚洲国产天堂久久综合| 亚洲精品在线视频| 亚洲高清免费在线| 欧美亚洲在线观看| 亚洲自拍16p| 欧美日本国产精品| 欧美77777| 精品不卡在线| 久久精品国产一区二区电影| 亚洲综合色网站| 欧美日韩国产在线观看| 亚洲国产精品传媒在线观看 | 国产日韩欧美在线一区| 亚洲一区二区三区免费视频| 99re热这里只有精品视频| 亚洲一区免费| 欧美日韩亚洲激情| 亚洲精品一区在线| 日韩一区二区免费高清| 欧美国产激情| 久久久久.com| 久久精品一二三| 国产网站欧美日韩免费精品在线观看 | 亚洲欧洲精品一区二区精品久久久| 红桃视频亚洲| 久久久欧美一区二区| 免费观看国产成人| 亚洲精品国产日韩| 欧美日韩一区二区三区免费看| 亚洲巨乳在线| 国产日韩精品久久| 欧美中文在线免费| 美女福利精品视频| 亚洲精品免费在线观看| 欧美日韩黄视频| 亚洲欧美激情诱惑| 久久在线精品| 日韩午夜高潮| 亚洲欧美成人网| 欧美色图五月天| 亚洲欧美日韩综合国产aⅴ| 久久久精品一区| 欧美在线视频一区二区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲电影免费观看高清完整版在线观看 | 亚洲网站在线播放| 免费亚洲电影| 国产一区二区三区奇米久涩| 老**午夜毛片一区二区三区| 亚洲激情另类| 国产精品va在线播放| 欧美专区日韩视频| 亚洲日本一区二区三区| 新片速递亚洲合集欧美合集| 在线观看日韩一区| 亚洲精品日韩在线| 国产精品久久久久久久久免费桃花| 午夜久久久久久久久久一区二区| 欧美h视频在线| 西西裸体人体做爰大胆久久久 | 亚洲美女黄网| 国产欧美一区二区三区在线看蜜臀 | 免费观看亚洲视频大全| 亚洲丝袜av一区| 影音先锋欧美精品| 国产精品羞羞答答| 欧美激情视频一区二区三区免费| 欧美一级欧美一级在线播放| 亚洲国产成人av| 国产欧美精品日韩区二区麻豆天美| 麻豆av福利av久久av| 亚洲欧美日韩精品久久亚洲区| 亚洲第一精品久久忘忧草社区| 欧美亚洲一级片| 9国产精品视频| 久久九九热免费视频| 日韩网站在线观看| 国产日韩欧美a| 国产精品福利在线| 欧美日韩在线观看一区二区| 麻豆成人av| 久久性色av| 久久精品水蜜桃av综合天堂|