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

天行健 君子當(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)簡(jiǎn)潔明了,這里只對(duì)函數(shù)D3DXComputeNormals()進(jìn)行說(shuō)明:

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)聲明方式來(lái)克隆網(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;
}
}

接下來(lái)檢查原網(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;
}
}

再接下來(lái)檢查克隆后的網(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(即要求自動(dòng)計(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(即要求自動(dòng)計(jì)算切線),則首先調(diào)用GenerateAdjacency()生成網(wǎng)格面鄰接信息,并調(diào)用D3DXComputeTangentFrameEx()來(lái)計(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 閱讀(1154) 評(píng)論(0)  編輯 收藏 引用


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


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

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

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久午夜色播影院免费高清| 国产精品二区二区三区| 欧美国产日韩一区二区三区| 另类国产ts人妖高潮视频| 久久久综合香蕉尹人综合网| 久久午夜国产精品| 欧美激情无毛| 一本久道久久综合婷婷鲸鱼| 一本大道久久a久久精二百| 一区二区三区视频在线观看| 午夜精品成人在线视频| 久久久久久精| 欧美日韩国产另类不卡| 国产女人18毛片水18精品| 在线播放一区| 亚洲视频在线观看免费| 久久久综合免费视频| 91久久久在线| 在线午夜精品| 久久精品国产免费观看| 欧美人成网站| 国产一区二区在线观看免费播放 | 久久久久免费| 欧美精品激情| 国产视频欧美| 亚洲精品一区二区三| 香蕉久久国产| 91久久精品美女高潮| 午夜精品国产更新| 欧美黄色一区二区| 韩国亚洲精品| 午夜精品亚洲| 亚洲精品资源| 久久色在线观看| 国产精品系列在线| 在线综合亚洲欧美在线视频| 久久综合成人精品亚洲另类欧美| 亚洲免费激情| 欧美xart系列在线观看| 国产亚洲一区二区三区| 亚洲在线一区二区| 亚洲久久成人| 欧美r片在线| 一区二区自拍| 久久久久久久久久码影片| 亚洲色图在线视频| 欧美日韩亚洲一区二区三区四区 | 午夜在线观看欧美| 欧美日韩亚洲国产一区| 亚洲经典一区| 欧美成人资源网| 久久久久国产一区二区三区| 亚洲精品永久免费| 午夜亚洲一区| 一区二区三区精密机械公司| 欧美大片免费观看在线观看网站推荐| 国产一区91精品张津瑜| 小黄鸭精品aⅴ导航网站入口| 亚洲日本免费| 欧美精品在线视频| 亚洲区在线播放| 亚洲国产精品t66y| 欧美韩日精品| 中国女人久久久| 亚洲美女啪啪| 国产精品久久久久一区二区三区 | 在线亚洲自拍| 国产精品va在线播放我和闺蜜| 99re6这里只有精品| 最新国产成人av网站网址麻豆| 免费久久精品视频| 亚洲卡通欧美制服中文| 日韩天堂在线观看| 国产精品三级久久久久久电影| 性欧美videos另类喷潮| 久久国产黑丝| 亚洲欧洲一区二区在线观看| 亚洲精品1区2区| 欧美视频一区二区三区四区| 午夜精品99久久免费| 欧美一区2区视频在线观看| 韩国av一区二区三区| 欧美成人性生活| 欧美激情视频给我| 亚洲欧美激情诱惑| 欧美一进一出视频| 亚洲国产日韩在线| 一本一本a久久| 国产一区二区三区在线观看视频| 欧美电影专区| 国产精品久久一卡二卡| 女人色偷偷aa久久天堂| 欧美日韩小视频| 久久久最新网址| 欧美日韩1区2区3区| 久久精品导航| 欧美激情bt| 久久精品日韩欧美| 欧美日韩国产在线观看| 久久久久久久久久久久久久一区| 欧美黄色一区| 久久在线免费观看| 国产精品国产三级国产普通话三级 | 久久成人av少妇免费| 免费日韩av电影| 午夜欧美精品| 欧美激情精品久久久| 久久精品五月婷婷| 欧美三级小说| 久久久高清一区二区三区| 猛干欧美女孩| 性久久久久久久久| 欧美另类女人| 蜜桃av一区二区三区| 国产精品呻吟| 99精品国产在热久久下载| 亚洲高清久久网| 欧美一区二区三区在线视频| 亚洲一区二区三区四区五区午夜 | 欧美在线视频观看免费网站| 宅男精品视频| 美女主播一区| 久久噜噜噜精品国产亚洲综合 | 在线电影欧美日韩一区二区私密| 亚洲天堂网站在线观看视频| 亚洲人成人99网站| 久久久www| 久久天堂成人| 好吊色欧美一区二区三区视频| 亚洲专区一区二区三区| 亚洲一区二区三区中文字幕| 欧美黄色日本| 亚洲激情视频在线观看| 亚洲国产综合视频在线观看| 久久久久久久一区二区三区| 久久久综合香蕉尹人综合网| 国产日韩欧美成人| 欧美一区中文字幕| 久久亚洲精品一区二区| 黑人巨大精品欧美一区二区小视频 | 亚洲国产成人一区| 久久嫩草精品久久久精品一| 久久亚洲电影| 1000精品久久久久久久久| 久久先锋影音| 亚洲成色777777在线观看影院| 亚洲国产一区二区三区青草影视| 欧美jizz19性欧美| 亚洲理论在线| 亚洲欧美偷拍卡通变态| 国产亚洲欧美中文| 久久人人精品| 亚洲精品社区| 欧美亚洲三区| 亚洲第一区在线| 欧美理论电影在线播放| 国产精品99久久久久久宅男| 久久av二区| 在线日韩中文字幕| 欧美日韩国产色站一区二区三区| 正在播放日韩| 久久女同互慰一区二区三区| 亚洲国产成人av| 欧美午夜理伦三级在线观看| 欧美影院成年免费版| 亚洲黄色成人| 亚洲欧美中文字幕| 亚洲第一在线视频| 欧美视频在线观看| 久久福利一区| aa亚洲婷婷| 美女免费视频一区| 亚洲综合99| 国产精品久久久久一区二区三区 | 国产日韩在线看| 久久性天堂网| 中国av一区| 欧美激情一区在线| 西瓜成人精品人成网站| 亚洲国产电影| 国产精品入口夜色视频大尺度| 久久一区二区视频| 中国成人亚色综合网站| 欧美fxxxxxx另类| 欧美一二区视频| 亚洲伦理在线观看| 尤物九九久久国产精品的分类| 欧美特黄视频| 欧美国产大片| 久久午夜羞羞影院免费观看| 亚洲欧美一区二区三区久久| 亚洲日本成人| 欧美电影免费观看大全| 久久精品在线观看| 午夜精品999| 亚洲一区二区网站| 亚洲免费电影在线观看| 亚洲成人在线免费| 精品成人在线| 激情成人综合网|