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

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

深度測試與alpha混合(2)

前面的一些例子中,已經(jīng)遇到了alpha值的概念,如結(jié)構(gòu)體D3DCOLORVALUE中的成員變量a,但它并沒有被使用,因為還沒有激活alpha混合(alpha blending),并且alpha總是被賦值為1.0f(默認(rèn)渲染狀態(tài)下alpha為1.0f,表示完全不透明)。

 

alpha混合原理

在前面介紹的示例程序中,繪制圖形的顏色總是替換當(dāng)前顏色緩沖區(qū)中存在的顏色,這樣后面的物體總是覆蓋在原有的物體上。但是當(dāng)想要繪制類似于玻璃、水等具有透明效果的物體時,這種方法顯然滿足不了要求。通過定義一個表示物體半透明度的alpha值和一個半透明計算公式,可以將要繪制的物體顏色與顏色緩沖區(qū)中存在的顏色相混合,從而繪制出具有半透明效果的物體。Direct3D計算alpha顏色混合的方法如下:

color = (RGBsrc * Ksrc) OP (RGBdst * Kdst)

其中color表示alpha混合后的顏色值,RGBsrc表示源顏色值,即將要繪制的圖元的顏色值;Ksrc表示源混合系數(shù),通常賦值為表示半透明程度的alpha值,也可以是屬于枚舉類型D3DBLEND的任意值,用來和RGBsrc相乘。RGBdst表示目標(biāo)顏色值,即當(dāng)前顏色緩沖區(qū)中的顏色值,Kdst表示目標(biāo)混合系數(shù),可以是屬于枚舉D3DBLEND的任意值,用來和RGBdst相乘。OP表示源計算結(jié)果與顏色緩沖區(qū)計算結(jié)果的混合方法,默認(rèn)狀態(tài)下OP為D3DBLEND_ADD,即源計算結(jié)果與顏色緩沖區(qū)計算結(jié)果相加。

圖形顯示中,對alpha混合最普遍的用法是:把Ksrc賦值為D3DBLEND_SRCALPHA,即當(dāng)前繪制像素的alpha值;把Kdst賦值為D3DBLEND_INVSRCALPHA,即1減去當(dāng)前繪制像素的alpha值;把OP賦值為D3DBLEND_ADD,使源計算結(jié)果和顏色緩沖區(qū)計算結(jié)果相加,這樣一來,alpha混合顏色的公式變?yōu)椋?/p>

color = (RGBsrc * Ksrc) + (RGBdst * Kdst)

上面的設(shè)置可以較好地模擬大多數(shù)半透明物體的效果。

 

啟用alpha混合

想要繪制半透明物體,首先需要激活Direct3D的alpha混合運算,調(diào)用Direct3D渲染狀態(tài)設(shè)置函數(shù)IDirect3DDevice9:::SetRenderState(),將第一個參數(shù)設(shè)置為D3DRS_ALPHABLENDENABLE,第二個參數(shù)設(shè)置為TRUE,可以激活alpha混合,代碼如下:

g_device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
 

設(shè)置alpha混合系數(shù)

在上面介紹的alpha混合原理中提到的源混合系數(shù)和目標(biāo)混合系數(shù),也是通過Direct3D渲染狀態(tài)設(shè)置函數(shù)IDirect3DDevice9::SetRenderState()設(shè)置的。若將第一個參數(shù)設(shè)置為D3DRS_SRCBLEND,則用于設(shè)置源混合系數(shù),若將第一個參數(shù)設(shè)置為D3DRS_DESTBLEND,則用于設(shè)置目標(biāo)混合系數(shù),第二個參數(shù)可以設(shè)置為D3DBLEND枚舉常量,各具體枚舉常量的含義如下:

Defines the supported blend mode.

typedef enum D3DBLEND
{
D3DBLEND_ZERO = 1,
D3DBLEND_ONE = 2,
D3DBLEND_SRCCOLOR = 3,
D3DBLEND_INVSRCCOLOR = 4,
D3DBLEND_SRCALPHA = 5,
D3DBLEND_INVSRCALPHA = 6,
D3DBLEND_DESTALPHA = 7,
D3DBLEND_INVDESTALPHA = 8,
D3DBLEND_DESTCOLOR = 9,
D3DBLEND_INVDESTCOLOR = 10,
D3DBLEND_SRCALPHASAT = 11,
D3DBLEND_BOTHSRCALPHA = 12,
D3DBLEND_BOTHINVSRCALPHA = 13,
D3DBLEND_BLENDFACTOR = 14,
D3DBLEND_INVBLENDFACTOR = 15,
D3DBLEND_SRCCOLOR2 = 16,
D3DBLEND_INVSRCCOLOR2 = 17,
D3DBLEND_FORCE_DWORD = 0x7fffffff,
} D3DBLEND, *LPD3DBLEND;

Constants

D3DBLEND_ZERO
Blend factor is (0, 0, 0, 0).
D3DBLEND_ONE
Blend factor is (1, 1, 1, 1).
D3DBLEND_SRCCOLOR
Blend factor is (Rs, Gs, Bs, As).
D3DBLEND_INVSRCCOLOR
Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).
D3DBLEND_SRCALPHA
Blend factor is (As, As, As, As).
D3DBLEND_INVSRCALPHA
Blend factor is ( 1 - As, 1 - As, 1 - As, 1 - As).
D3DBLEND_DESTALPHA
Blend factor is (Ad Ad Ad Ad).
D3DBLEND_INVDESTALPHA
Blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad).
D3DBLEND_DESTCOLOR
Blend factor is (Rd, Gd, Bd, Ad).
D3DBLEND_INVDESTCOLOR
Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).
D3DBLEND_SRCALPHASAT
Blend factor is (f, f, f, 1); where f = min(As, 1 - Ad).
D3DBLEND_BOTHSRCALPHA
Obsolete. Starting with DirectX 6, you can achieve the same effect by setting the source and destination blend factors to D3DBLEND_SRCALPHA and D3DBLEND_INVSRCALPHA in separate calls.
D3DBLEND_BOTHINVSRCALPHA
Source blend factor is (1 - As, 1 - As, 1 - As, 1 - As), and destination blend factor is (As, As, As, As); the destination blend selection is overridden. This blend mode is supported only for the D3DRS_SRCBLEND render state.
D3DBLEND_BLENDFACTOR
Constant color blending factor used by the frame-buffer blender. This blend mode is supported only if D3DPBLENDCAPS_BLENDFACTOR is set in the SrcBlendCaps or DestBlendCaps members of D3DCAPS9.
D3DBLEND_INVBLENDFACTOR
Inverted constant color-blending factor used by the frame-buffer blender. This blend mode is supported only if the D3DPBLENDCAPS_BLENDFACTOR bit is set in the SrcBlendCaps or DestBlendCaps members of D3DCAPS9.
D3DBLEND_SRCCOLOR2
Blend factor is (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, not used). See Render Target Blending.
Differences between Direct3D 9 and Direct3D 9Ex:

This flag is available in Direct3D 9Ex only.

D3DBLEND_INVSRCCOLOR2
Blend factor is (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, not used)). See Render Target Blending.
Differences between Direct3D 9 and Direct3D 9Ex:

This flag is available in Direct3D 9Ex only.

D3DBLEND_FORCE_DWORD
Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.

Remarks

In the preceding member descriptions, the RGBA values of the source and destination are indicated by the s and d subscripts.

The values in this enumerated type are used by the following render states:

  • D3DRS_DESTBLEND
  • D3DRS_SRCBLEND
  • D3DRS_DESTBLENDALPHA
  • D3DRS_SRCBLENDALPHA

See D3DRENDERSTATETYPE

Render Target Blending

Direct3D 9Ex has improved text rendering capabilities. Rendering clear-type fonts would normally require two passes. To eliminate the second pass, a pixel shader can be used to output two colors, which we can call PSOutColor[0] and PSOutColor[1]. The first color would contain the standard 3 color components (RGB). The second color would contain 3 alpha components (one for each component of the first color).

These new blending modes are only used for text rendering on the first render target.

設(shè)置alpha混合系數(shù)的代碼示例如下:

g_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
g_device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

 

設(shè)置alpha混合方法

alpha混合方法指定源顏色和目標(biāo)顏色的混合方法,通過Direct3D渲染狀態(tài)設(shè)置函數(shù)IDirect3DDevice9::SetRenderState()設(shè)置,其中第一個參數(shù)設(shè)置為 D3DRS_BLENDOP,第二個參數(shù)設(shè)置為D3DBLENDOP枚舉常量,各常量的含義如下:

Defines the supported blend operations. See Remarks for definitions of terms.

typedef enum D3DBLENDOP
{
D3DBLENDOP_ADD = 1,
D3DBLENDOP_SUBTRACT = 2,
D3DBLENDOP_REVSUBTRACT = 3,
D3DBLENDOP_MIN = 4,
D3DBLENDOP_MAX = 5,
D3DBLENDOP_FORCE_DWORD = 0x7fffffff,
} D3DBLENDOP, *LPD3DBLENDOP;

Constants

D3DBLENDOP_ADD
The result is the destination added to the source. Result = Source + Destination
D3DBLENDOP_SUBTRACT
The result is the destination subtracted from to the source. Result = Source - Destination
D3DBLENDOP_REVSUBTRACT
The result is the source subtracted from the destination. Result = Destination - Source
D3DBLENDOP_MIN
The result is the minimum of the source and destination. Result = MIN(Source, Destination)
D3DBLENDOP_MAX
The result is the maximum of the source and destination. Result = MAX(Source, Destination)
D3DBLENDOP_FORCE_DWORD
Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.

Remarks

Source, Destination, and Result are defined as:

Term Type Description
Source Input Color of the source pixel before the operation.
Destination Input Color of the pixel in the destination buffer before the operation.
Result Output Returned value that is the blended color resulting from the operation.

This enumerated type defines values used by the following render states:

  • D3DRS_BLENDOP
  • D3DRS_BLENDOPALPHA

 

示例程序:

該示例程序模擬了直升飛機(jī)螺旋槳的半透明效果。在程序的初始化階段,載入Heli.x文件,它是一個包含直升飛機(jī)的三維模型文件,其中螺旋槳的材質(zhì)漫反射屬性為(R, G, B, A) = (0.183700; 0.183700; 0.183700; 0.500000; ),可以用文本方式打開Heli.x查看它的材質(zhì)屬性,Heli.x是一個文本格式的.x文件。

示例程序中沒有設(shè)置alpha混合方法,所以應(yīng)用程序?qū)⒉捎媚J(rèn)的alpha混合方法D3DBLEND_ADD,即將源計算結(jié)果與顏色緩沖區(qū)計算結(jié)果相加。由于直升機(jī)螺旋槳的材質(zhì)的alpha值為0.5f,因此它的最終顏色就是50%的玻璃顏色加上50%的背景顏色。

按下數(shù)字鍵"1",激活alpha混合。

 

按下數(shù)字鍵"0",禁用alpha混合。

 

設(shè)置alpha混合方法為D3DBLENDOP_SUBTRACT的效果圖,啟用alpha混合時。

g_device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_SUBTRACT);

 

設(shè)置以下代碼時的效果圖,可以看到直升機(jī)變亮了,啟用alpha混合:

g_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
g_device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_DESTCOLOR);

 

設(shè)置以下代碼時的效果圖,可以看到直升機(jī)變暗了,啟用alpha混合:

g_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
g_device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVDESTCOLOR);

 

可以根據(jù)需要自己修改設(shè)置,以實現(xiàn)不同的顏色混合效果。

 

由于alpha混合是當(dāng)前繪制的像素顏色與顏色緩沖區(qū)中存在的顏色的混合運算,因此,在繪制半透明物體前,必須保證位于半透明物體后的物體先于半透明物體繪制,也就是說,先繪制不透明物體,再繪制半透明物體。

有些計算機(jī)硬件由于功能的限制,可能不支持某些混合方法,這時Direct3D會自動使用alpha混合方法D3DBLENDOP_ADD。

 

源程序:

#include <d3dx9.h>

#pragma warning(disable : 
4127)

#define CLASS_NAME    "GameApp"

#define release_com(p)    do { if(p) { (p)->Release(); (p) = NULL; } } while(0)

IDirect3D9
*                g_d3d;
IDirect3DDevice9
*        g_device;

ID3DXMesh
*                g_mesh;
D3DMATERIAL9
*            g_mesh_materials;
IDirect3DTexture9
**        g_mesh_textures;
DWORD                    g_num_materials;

void setup_world_matrix()
{
    D3DXMATRIX mat_world;
    D3DXMatrixRotationY(
&mat_world, timeGetTime() / 1000.0f);
    g_device
->SetTransform(D3DTS_WORLD, &mat_world);
}

void setup_view_proj_matrices()
{
    
// setup view matrix

    D3DXVECTOR3 eye(
0.0f15.0f-20.0f);
    D3DXVECTOR3 at(
0.0f,  0.0f,   0.0f);
    D3DXVECTOR3 up(
0.0f,  1.0f,   0.0f);

    D3DXMATRIX mat_view;
    D3DXMatrixLookAtLH(
&mat_view, &eye, &at, &up);
    g_device
->SetTransform(D3DTS_VIEW, &mat_view);

    
// setup projection matrix
    D3DXMATRIX mat_proj;
    D3DXMatrixPerspectiveFovLH(
&mat_proj, D3DX_PI/41.0f1.0f500.0f);
    g_device
->SetTransform(D3DTS_PROJECTION, &mat_proj);
}

bool init_geometry()
{
    ID3DXBuffer
* material_buffer;

    
/*
     D3DXLoadMeshFromXA(
        LPCSTR pFilename, 
        DWORD Options, 
        LPDIRECT3DDEVICE9 pD3DDevice, 
        LPD3DXBUFFER *ppAdjacency,
        LPD3DXBUFFER *ppMaterials, 
        LPD3DXBUFFER *ppEffectInstances, 
        DWORD *pNumMaterials,
        LPD3DXMESH *ppMesh);
    
*/

    
if(FAILED(D3DXLoadMeshFromX("heli.x", D3DXMESH_SYSTEMMEM, g_device, NULL, &material_buffer, NULL,
                                
&g_num_materials, &g_mesh)))
    {
        MessageBox(NULL, 
"Could not find heli.x""ERROR", MB_OK);
        
return false;
    }

    D3DXMATERIAL
* xmaterials = (D3DXMATERIAL*) material_buffer->GetBufferPointer();

    g_mesh_materials 
= new D3DMATERIAL9[g_num_materials];
    g_mesh_textures     
= new IDirect3DTexture9*[g_num_materials];

    
for(DWORD i = 0; i < g_num_materials; i++)
    {
        g_mesh_materials[i] 
= xmaterials[i].MatD3D;

        
// set ambient reflected coefficient, because .x file do not set it.
        g_mesh_materials[i].Ambient = g_mesh_materials[i].Diffuse;

        g_mesh_textures[i] 
= NULL;

        
if(xmaterials[i].pTextureFilename != NULL && strlen(xmaterials[i].pTextureFilename) > 0)    
            D3DXCreateTextureFromFile(g_device, xmaterials[i].pTextureFilename, 
&g_mesh_textures[i]);    
    }

    material_buffer
->Release();

    
return true;
}

bool init_d3d(HWND hwnd)
{
    g_d3d 
= Direct3DCreate9(D3D_SDK_VERSION);

    
if(g_d3d == NULL)
        
return false;

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(
&d3dpp, sizeof(d3dpp));

    d3dpp.Windowed                    
= TRUE;
    d3dpp.SwapEffect                
= D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat            
= D3DFMT_UNKNOWN;
    d3dpp.EnableAutoDepthStencil    
= TRUE;
    d3dpp.AutoDepthStencilFormat    
= D3DFMT_D16;

    
if(FAILED(g_d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                  
&d3dpp, &g_device)))
    {
        
return false;
    }
    
    
if(! init_geometry())
        
return false;

    setup_view_proj_matrices();    

    g_device
->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    g_device
->SetRenderState(D3DRS_SRCBLEND,         D3DBLEND_SRCALPHA);
    g_device
->SetRenderState(D3DRS_DESTBLEND,         D3DBLEND_INVSRCALPHA);    

    
//g_device->SetRenderState(D3DRS_SRCBLEND,         D3DBLEND_ONE);
    
//g_device->SetRenderState(D3DRS_DESTBLEND,         D3DBLEND_INVDESTCOLOR);    

    
//g_device->SetRenderState(D3DRS_BLENDOP,             D3DBLENDOP_SUBTRACT);        

    g_device
->SetRenderState(D3DRS_ZENABLE,         TRUE);
    g_device
->SetRenderState(D3DRS_ZFUNC,         D3DCMP_LESS);
    g_device
->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

    g_device
->SetRenderState(D3DRS_AMBIENT, 0xFFFFBB55);
    
    
return true;
}

void cleanup()
{
    delete[] g_mesh_materials;

    
if(g_mesh_textures)
    {
        
for(DWORD i = 0; i < g_num_materials; i++)
            release_com(g_mesh_textures[i]);

        delete[] g_mesh_textures;
    }
    
    release_com(g_mesh);
    release_com(g_device);
    release_com(g_d3d);
}

void render()
{
    g_device
->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(555), 1.0f0);

    g_device
->BeginScene();

    setup_world_matrix();

    
// render opaque object first
    for(DWORD i = 0; i < g_num_materials; i++)
    {
        
if(g_mesh_materials[i].Diffuse.a == 1.0f)
        {
            g_device
->SetMaterial(&g_mesh_materials[i]);
            g_device
->SetTexture(0, g_mesh_textures[i]);

            g_mesh
->DrawSubset(i);
        }        
    }        

    
// render transparent object second
    for(DWORD i = 0; i < g_num_materials; i++)
    {
        
if(g_mesh_materials[i].Diffuse.a != 1.0f)
        {
            g_device
->SetMaterial(&g_mesh_materials[i]);
            g_device
->SetTexture(0, g_mesh_textures[i]);

            g_mesh
->DrawSubset(i);
        }        
    }        
    
    g_device
->EndScene();

    g_device
->Present(NULL, NULL, NULL, NULL);
}

LRESULT WINAPI WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    
switch(msg)
    {
    
case WM_KEYDOWN:
        
switch(wParam)
        {
        
case 48// press key "0", disable alpha blend.
            g_device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
            
break;

        
case 49// press key "1", enable alpha blend.
            g_device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
            
break;

        
case VK_ESCAPE:
            DestroyWindow(hwnd);
            
break;
        }    

        
break;

    
case WM_DESTROY:
        PostQuitMessage(
0);
        
return 0;
    }

    
return DefWindowProc(hwnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE inst, HINSTANCE, LPSTR, INT)
{
    WNDCLASSEX wc;

    wc.cbSize            
= sizeof(WNDCLASSEX);
    wc.style            
= CS_CLASSDC;
    wc.lpfnWndProc        
= WinProc;
    wc.cbClsExtra        
= 0;
    wc.cbWndExtra        
= 0;
    wc.hInstance        
= inst;
    wc.hIcon            
= NULL;
    wc.hCursor            
= NULL;
    wc.hbrBackground    
= NULL;
    wc.lpszMenuName        
= NULL;
    wc.lpszClassName    
= CLASS_NAME;
    wc.hIconSm            
= NULL;

    
if(! RegisterClassEx(&wc))
        
return -1;

    HWND hwnd 
= CreateWindow(CLASS_NAME, "Direct3D App", WS_OVERLAPPEDWINDOW, 200100640480,
                             NULL, NULL, wc.hInstance, NULL);    

    
if(hwnd == NULL)
        
return -1;

    
if(init_d3d(hwnd))
    {
        ShowWindow(hwnd, SW_SHOWDEFAULT);
        UpdateWindow(hwnd);

        MSG msg;
        ZeroMemory(
&msg, sizeof(msg));

        
while(msg.message != WM_QUIT)
        {
            
if(PeekMessage(&msg, NULL, 00, PM_REMOVE))
            {
                TranslateMessage(
&msg);
                DispatchMessage(
&msg);
            }
                
            render();
        }
    }

    cleanup();
    UnregisterClass(CLASS_NAME, wc.hInstance);    

    
return 0;
}

 

下載示例工程


posted on 2008-05-10 11:44 lovedday 閱讀(4327) 評論(1)  編輯 收藏 引用

評論

# re: 深度測試與alpha混合(2) 2012-10-18 01:23 小馬甲

再一次的跑到朋友這里。。。  回復(fù)  更多評論   


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


公告

導(dǎo)航

統(tǒng)計

常用鏈接

隨筆分類(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>
            日韩午夜免费| 亚洲国产精品一区二区www在线| 最近中文字幕日韩精品| 国产伦精品一区二区三区免费迷| 欧美色欧美亚洲另类七区| 欧美精品电影| 久久视频一区| 久久久综合激的五月天| 久久嫩草精品久久久精品一| 欧美www在线| 很黄很黄激情成人| 国产精品vvv| 亚洲一区二区精品视频| 免费试看一区| 欧美午夜精品久久久久免费视| 国产精品久久久久av免费| 国产精品欧美精品| 有码中文亚洲精品| 亚洲一级黄色| 久久精品道一区二区三区| 欧美电影免费观看| 亚洲午夜精品久久| 久久久免费精品视频| 亚洲第一级黄色片| 亚洲国产精品va在线观看黑人| 91久久精品一区二区三区| 亚洲免费一在线| 欧美成人免费一级人片100| 国产精品爱久久久久久久| 好吊日精品视频| 性欧美激情精品| 欧美激情一二三区| 亚洲欧美日韩成人| 亚洲一区二区三区视频播放| 国产欧美日韩专区发布| 亚洲黄色三级| 亚洲免费视频网站| 欧美黑人在线播放| 午夜国产精品视频免费体验区| 欧美aⅴ一区二区三区视频| 国产美女搞久久| 一区二区三区四区精品| 一区二区亚洲欧洲国产日韩| 一本不卡影院| 欧美黄色成人网| 久久gogo国模啪啪人体图| 欧美日韩大片| 亚洲欧洲综合| 欧美gay视频激情| 午夜精品www| 欧美亚日韩国产aⅴ精品中极品| 亚洲免费观看高清完整版在线观看| 久久国产99| 一本色道久久综合狠狠躁篇的优点| 开心色5月久久精品| 国内精品免费在线观看| 欧美在线视频一区二区| 亚洲一区二区三区四区五区黄| 欧美国产免费| 在线成人激情黄色| 麻豆国产精品一区二区三区| 久久久久久亚洲精品不卡4k岛国| 免费成人黄色片| 欧美中文在线免费| 国产情人节一区| 欧美在线视频不卡| 午夜一级久久| 国产一区二区三区在线播放免费观看| 亚洲欧美色婷婷| 亚洲男女自偷自拍| 国产伦精品一区二区三区四区免费| 亚洲专区一区| 香蕉国产精品偷在线观看不卡| 久久一区中文字幕| 欧美 日韩 国产精品免费观看| 噜噜噜躁狠狠躁狠狠精品视频| 在线不卡免费欧美| 亚洲国产日韩欧美| 欧美午夜精品久久久久久浪潮| 99热精品在线| 99re热这里只有精品免费视频| 国产精品海角社区在线观看| 亚洲欧美日本视频在线观看| 午夜精品一区二区三区在线 | 久久青草欧美一区二区三区| 午夜久久资源| 国产真实乱子伦精品视频| 亚洲国产清纯| 久久夜色精品国产欧美乱| 在线一区二区三区做爰视频网站 | 欧美国产精品专区| 亚洲午夜性刺激影院| 久久综合久色欧美综合狠狠| 久久精品国产999大香线蕉| 亚洲免费视频观看| 国产一区二区三区四区在线观看| 鲁大师影院一区二区三区| 欧美成人有码| 亚洲自拍电影| 久久综合狠狠综合久久综青草| 一本久久综合亚洲鲁鲁| 午夜宅男欧美| 99精品国产99久久久久久福利| 亚洲永久精品国产| 99精品视频一区二区三区| 欧美与黑人午夜性猛交久久久| 久久久亚洲欧洲日产国码αv| 99成人免费视频| 欧美在线资源| 亚洲一区欧美一区| 久久另类ts人妖一区二区| 亚洲麻豆视频| 亚洲摸下面视频| 99国产一区| 欧美在线视频日韩| 亚洲一区二区三| 亚洲精品影院在线观看| 免费观看不卡av| 国产精品午夜视频| 99精品欧美一区二区蜜桃免费| 在线日本欧美| 午夜精品视频| 亚洲欧美激情一区| 欧美日韩国产免费观看| 欧美sm视频| 激情亚洲网站| 性视频1819p久久| 午夜视频在线观看一区| 欧美日韩精品一区二区三区| 欧美高清在线一区二区| 久久精品99国产精品| 亚洲欧美国产高清| 欧美日韩你懂的| 亚洲精品久久久一区二区三区| 亚洲国产精品传媒在线观看| 久久精品在线播放| 久久久久一本一区二区青青蜜月| 国产精品综合久久久| 亚洲欧美国产精品专区久久| 亚洲高清不卡一区| 久久综合电影一区| 欧美一级成年大片在线观看| 欧美一区国产一区| 国产精品久久夜| 亚洲男女毛片无遮挡| 欧美一级淫片播放口| 国产三级精品三级| 久久国产精品亚洲77777| 久久久综合网站| 亚洲欧美日产图| 久久人人爽人人| 亚洲电影免费| 欧美二区乱c少妇| 亚洲精品1区| 欧美夫妇交换俱乐部在线观看| 亚洲国产精品视频| 在线视频日韩| 国产精品网站在线观看| 欧美在线视频在线播放完整版免费观看 | 欧美在线视频一区二区三区| 免播放器亚洲一区| 亚洲激情在线观看视频免费| 99精品久久| 国产精品性做久久久久久| 亚洲午夜精品| 免费观看一区| 亚洲第一精品福利| 欧美成人综合网站| 亚洲破处大片| 欧美在线啊v| 欧美亚洲日本国产| 你懂的国产精品永久在线| 亚洲精品视频啊美女在线直播| 欧美精品久久久久久久久老牛影院| 亚洲精品日本| 久久米奇亚洲| 99日韩精品| 伊大人香蕉综合8在线视| 欧美乱人伦中文字幕在线| 午夜在线视频观看日韩17c| 亚洲人www| 欧美一级久久久久久久大片| 久久国产毛片| 日韩一级欧洲| 激情视频一区二区三区| 国产精品久久久久久久久免费樱桃 | 久久久精品五月天| 美腿丝袜亚洲色图| 亚洲愉拍自拍另类高清精品| 亚洲国产精品久久久| 国产精品综合网站| 欧美日韩国产成人精品| 久久久欧美精品| 亚洲一二区在线| 亚洲另类黄色| 亚洲日本成人| 欧美美女bbbb| 久久综合狠狠综合久久综青草| 午夜精品偷拍| 亚洲婷婷在线|