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

天行健 君子當自強而不息

D3D中的模板緩存(4)

該示例演示了如何利用D3D中的模板緩存技術(shù)同時顯示物體的鏡像和陰影。

主程序:

/**************************************************************************************
  Demonstrates mirrors and shadows with stencils.  
  Use the arrow keys and the 'A' and 'S' key to navigate the scene and translate the teapot. 
 *************************************************************************************
*/

#include 
"d3dUtility.h"

#pragma warning(disable : 
4100)

class cTextureVertex
{
public:
    
float _x, _y, _z;
    
float _nx, _ny, _nz;
    
float _u, _v;

    cTextureVertex() { }

    cTextureVertex(
float x, float y, float z, 
                   
float nx, float ny, float nz,
                   
float u, float v)
    {
        _x  
= x;  _y  = y;  _z  = z;
        _nx 
= nx; _ny = ny; _nz = nz;
        _u  
= u;  _v  = v;
    }    
};

const DWORD TEXTURE_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;

const int WIDTH  = 640;
const int HEIGHT = 480;

IDirect3DDevice9
*        g_d3d_device;
IDirect3DVertexBuffer9
*    g_vertex_buffer;

IDirect3DTexture9
*        g_floor_texture;
IDirect3DTexture9
*        g_wall_texture;
IDirect3DTexture9
*        g_mirror_texture;

D3DMATERIAL9    g_floor_material  
= WHITE_MATERIAL;
D3DMATERIAL9    g_wall_material   
= WHITE_MATERIAL;
D3DMATERIAL9    g_mirror_material 
= WHITE_MATERIAL;

ID3DXMesh
*        g_teapot_mesh;
D3DXVECTOR3        g_teapot_pos(
0.0f3.0f-7.5f);
D3DMATERIAL9    g_teapot_material 
= YELLOW_MATERIAL;

void render_scene();
void render_mirror();
void render_shadow();

////////////////////////////////////////////////////////////////////////////////////////////////////

bool setup()
{    
    
// make walls have low specular reflectance - 20%
    g_wall_material.Specular = WHITE * 0.2f;

    D3DXCreateTeapot(g_d3d_device, 
&g_teapot_mesh, NULL);

    
// Create and specify geometry.  For this sample we draw a floor and a wall with a mirror on it.  
    
// We put the floor, wall, and mirror geometry in one vertex buffer.
    
//
    
//   |----|----|----|
    
//   |Wall|Mirr|Wall|
    
//   |    | or |    |
    
//   /--------------/
    
//  /   Floor      /
    
// /--------------/

    g_d3d_device
->CreateVertexBuffer(24 * sizeof(cTextureVertex), 0, TEXTURE_VERTEX_FVF, D3DPOOL_MANAGED,
                                     
&g_vertex_buffer, NULL);

    cTextureVertex
* v;

    g_vertex_buffer
->Lock(00, (void**)&v, 0);

    
// floor
    v[0= cTextureVertex(-7.5f0.0f-10.0f0.0f1.0f0.0f0.0f1.0f);
    v[
1= cTextureVertex(-7.5f0.0f,   0.0f0.0f1.0f0.0f0.0f0.0f);
    v[
2= cTextureVertex( 7.5f0.0f,   0.0f0.0f1.0f0.0f1.0f0.0f);
    
    v[
3= cTextureVertex(-7.5f0.0f-10.0f0.0f1.0f0.0f0.0f1.0f);
    v[
4= cTextureVertex( 7.5f0.0f,   0.0f0.0f1.0f0.0f1.0f0.0f);
    v[
5= cTextureVertex( 7.5f0.0f-10.0f0.0f1.0f0.0f1.0f1.0f);

    
// wall
    v[6]  = cTextureVertex(-7.5f0.0f0.0f0.0f0.0f-1.0f0.0f1.0f);
    v[
7]  = cTextureVertex(-7.5f5.0f0.0f0.0f0.0f-1.0f0.0f0.0f);
    v[
8]  = cTextureVertex(-2.5f5.0f0.0f0.0f0.0f-1.0f1.0f0.0f);
    
    v[
9]  = cTextureVertex(-7.5f0.0f0.0f0.0f0.0f-1.0f0.0f1.0f);
    v[
10= cTextureVertex(-2.5f5.0f0.0f0.0f0.0f-1.0f1.0f0.0f);
    v[
11= cTextureVertex(-2.5f0.0f0.0f0.0f0.0f-1.0f1.0f1.0f);

    
// Note: We leave gap in middle of walls for mirror

    v[
12= cTextureVertex(2.5f0.0f0.0f0.0f0.0f-1.0f0.0f1.0f);
    v[
13= cTextureVertex(2.5f5.0f0.0f0.0f0.0f-1.0f0.0f0.0f);
    v[
14= cTextureVertex(7.5f5.0f0.0f0.0f0.0f-1.0f1.0f0.0f);
    
    v[
15= cTextureVertex(2.5f0.0f0.0f0.0f0.0f-1.0f0.0f1.0f);
    v[
16= cTextureVertex(7.5f5.0f0.0f0.0f0.0f-1.0f1.0f0.0f);
    v[
17= cTextureVertex(7.5f0.0f0.0f0.0f0.0f-1.0f1.0f1.0f);

    
// mirror
    v[18= cTextureVertex(-2.5f0.0f0.0f0.0f0.0f-1.0f0.0f1.0f);
    v[
19= cTextureVertex(-2.5f5.0f0.0f0.0f0.0f-1.0f0.0f0.0f);
    v[
20= cTextureVertex( 2.5f5.0f0.0f0.0f0.0f-1.0f1.0f0.0f);
    
    v[
21= cTextureVertex(-2.5f0.0f0.0f0.0f0.0f-1.0f0.0f1.0f);
    v[
22= cTextureVertex( 2.5f5.0f0.0f0.0f0.0f-1.0f1.0f0.0f);
    v[
23= cTextureVertex( 2.5f0.0f0.0f0.0f0.0f-1.0f1.0f1.0f);

    g_vertex_buffer
->Unlock();

    
// create the texture and set filters

    D3DXCreateTextureFromFile(g_d3d_device, 
"checker.jpg",    &g_floor_texture);
    D3DXCreateTextureFromFile(g_d3d_device, 
"brick0.jpg",    &g_wall_texture);
    D3DXCreateTextureFromFile(g_d3d_device, 
"ice.bmp",        &g_mirror_texture);

    g_d3d_device
->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
    g_d3d_device
->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
    g_d3d_device
->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

    
// lights

    D3DXVECTOR3 light_dir(
0.707f-0.707f0.707f);
    D3DXCOLOR color(
1.0f1.0f1.0f1.0f);
    D3DLIGHT9 light 
= init_directional_light(&light_dir, &color);

    g_d3d_device
->SetLight(0&light);
    g_d3d_device
->LightEnable(0, TRUE);

    g_d3d_device
->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
    g_d3d_device
->SetRenderState(D3DRS_SPECULARENABLE, TRUE);

    
// set the projection matrix
    D3DXMATRIX proj;
    D3DXMatrixPerspectiveFovLH(
&proj, D3DX_PI/4.0f, (float)WIDTH/HEIGHT, 1.0f1000.0f);
    g_d3d_device
->SetTransform(D3DTS_PROJECTION, &proj);
    
    
return true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

void cleanup()
{    
    safe_release
<IDirect3DVertexBuffer9*>(g_vertex_buffer);
    safe_release
<IDirect3DTexture9*>(g_floor_texture);
    safe_release
<IDirect3DTexture9*>(g_wall_texture);
    safe_release
<IDirect3DTexture9*>(g_mirror_texture);
    safe_release
<ID3DXMesh*>(g_teapot_mesh);    
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

bool display(float time_delta)
{
    
// update the scene

    
if(GetAsyncKeyState(VK_LEFT) & 0x80000f)
        g_teapot_pos.x 
-= 3.0f * time_delta;

    
if(GetAsyncKeyState(VK_RIGHT) & 0x80000f)
        g_teapot_pos.x 
+= 3.0f * time_delta;

    
static float radius = 20.0f;

    
if(GetAsyncKeyState(VK_UP) & 0x80000f)
        radius 
-= 2.0f * time_delta;

    
if(GetAsyncKeyState(VK_DOWN) & 0x80000f)
        radius 
+= 2.0f * time_delta;

    
static float angle = (3.0f * D3DX_PI) / 2.0f;

    
if(GetAsyncKeyState('A'& 0x80000f)
        angle 
-= 0.5f * time_delta;

    
if(GetAsyncKeyState('S'& 0x80000f)
        angle 
+= 0.5f * time_delta;

    D3DXVECTOR3 position(cosf(angle) 
* radius, 3.0f, sinf(angle) * radius);
    D3DXVECTOR3 target(
0.0f0.0f0.0f);
    D3DXVECTOR3 up(
0.0f1.0f0.0f);

    D3DXMATRIX view_matrix;
    D3DXMatrixLookAtLH(
&view_matrix, &position, &target, &up);
    g_d3d_device
->SetTransform(D3DTS_VIEW, &view_matrix);

    
// render now

    g_d3d_device
->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, 0xff0000001.0f0);

    g_d3d_device
->BeginScene();

    render_scene();
    render_mirror();
    render_shadow();

    g_d3d_device
->EndScene();

    g_d3d_device
->Present(NULL, NULL, NULL, NULL);

    
return true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

void render_scene()
{
    
// draw teapot

    g_d3d_device
->SetMaterial(&g_teapot_material);
    g_d3d_device
->SetTexture(0, NULL);

    D3DXMATRIX world_matrix;
    D3DXMatrixTranslation(
&world_matrix, g_teapot_pos.x, g_teapot_pos.y, g_teapot_pos.z);
    g_d3d_device
->SetTransform(D3DTS_WORLD, &world_matrix);

    g_teapot_mesh
->DrawSubset(0);

    D3DXMATRIX identity_matrix;
    D3DXMatrixIdentity(
&identity_matrix);
    g_d3d_device
->SetTransform(D3DTS_WORLD, &identity_matrix);

    g_d3d_device
->SetStreamSource(0, g_vertex_buffer, 0sizeof(cTextureVertex));
    g_d3d_device
->SetFVF(TEXTURE_VERTEX_FVF);

    
// draw the floor
    g_d3d_device->SetMaterial(&g_floor_material);
    g_d3d_device
->SetTexture(0, g_floor_texture);
    g_d3d_device
->DrawPrimitive(D3DPT_TRIANGLELIST, 02);

    
// draw the walls
    g_d3d_device->SetMaterial(&g_wall_material);
    g_d3d_device
->SetTexture(0, g_wall_texture);
    g_d3d_device
->DrawPrimitive(D3DPT_TRIANGLELIST, 64);

    
// draw the mirror
    g_d3d_device->SetMaterial(&g_mirror_material);
    g_d3d_device
->SetTexture(0, g_mirror_texture);
    g_d3d_device
->DrawPrimitive(D3DPT_TRIANGLELIST, 182);
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

void render_mirror()
{
    
// Draw Mirror quad to stencil buffer ONLY.  In this way only the stencil bits that 
    
// correspond to the mirror will be on.  Therefore, the reflected teapot can only be 
    
// rendered where the stencil bits are turned on, and thus on the mirror only.

    g_d3d_device
->SetRenderState(D3DRS_STENCILENABLE,        TRUE);
    g_d3d_device
->SetRenderState(D3DRS_STENCILFUNC,            D3DCMP_ALWAYS);
    g_d3d_device
->SetRenderState(D3DRS_STENCILREF,            0x1);
    g_d3d_device
->SetRenderState(D3DRS_STENCILMASK,            0xffffffff);
    g_d3d_device
->SetRenderState(D3DRS_STENCILWRITEMASK,    0xffffffff);
    g_d3d_device
->SetRenderState(D3DRS_STENCILZFAIL,        D3DSTENCILOP_KEEP);
    g_d3d_device
->SetRenderState(D3DRS_STENCILFAIL,            D3DSTENCILOP_KEEP);
    g_d3d_device
->SetRenderState(D3DRS_STENCILPASS,            D3DSTENCILOP_REPLACE);

    
// draw the mirror to the stencil buffer

    g_d3d_device
->SetStreamSource(0, g_vertex_buffer, 0sizeof(cTextureVertex));
    g_d3d_device
->SetFVF(TEXTURE_VERTEX_FVF);
    g_d3d_device
->SetMaterial(&g_mirror_material);
    g_d3d_device
->SetTexture(0, g_mirror_texture);

    D3DXMATRIX identity_matrix;
    D3DXMatrixIdentity(
&identity_matrix);
    g_d3d_device
->SetTransform(D3DTS_WORLD, &identity_matrix);

    g_d3d_device
->DrawPrimitive(D3DPT_TRIANGLELIST, 182);
    
    
// only draw reflected teapot to the pixels where the mirror was drawn to
    g_d3d_device->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL);

    
// clear depth buffer and blend the reflected teapot with the mirror
    g_d3d_device->Clear(0, NULL, D3DCLEAR_ZBUFFER, 01.0f0);
    g_d3d_device
->SetRenderState(D3DRS_ALPHABLENDENABLE,    TRUE);
    g_d3d_device
->SetRenderState(D3DRS_SRCBLEND,            D3DBLEND_DESTCOLOR);
    g_d3d_device
->SetRenderState(D3DRS_DESTBLEND,            D3DBLEND_ZERO);

    
// position reflection

    D3DXMATRIX world_matrix, translation_matrix, reflect_matrix;

    D3DXPLANE plane(
0.0f0.0f1.0f0.0f);    // xy plane
    D3DXMatrixReflect(&reflect_matrix, &plane);

    D3DXMatrixTranslation(
&translation_matrix, g_teapot_pos.x, g_teapot_pos.y, g_teapot_pos.z);

    world_matrix 
= translation_matrix * reflect_matrix;

    
// Finally, draw the reflected teapot.
    g_d3d_device->SetTransform(D3DTS_WORLD, &world_matrix);
    g_d3d_device
->SetMaterial(&g_teapot_material);
    g_d3d_device
->SetTexture(0, NULL);

    
// reverse cull mode
    g_d3d_device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);

    g_teapot_mesh
->DrawSubset(0);

    
// restore render states
    g_d3d_device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
    g_d3d_device
->SetRenderState(D3DRS_STENCILENABLE,     FALSE);
    g_d3d_device
->SetRenderState(D3DRS_CULLMODE,         D3DCULL_CCW);
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

void render_shadow()
{    
    g_d3d_device
->SetRenderState(D3DRS_STENCILENABLE,        TRUE);
    g_d3d_device
->SetRenderState(D3DRS_STENCILFUNC,            D3DCMP_EQUAL);
    g_d3d_device
->SetRenderState(D3DRS_STENCILREF,            0x0);
    g_d3d_device
->SetRenderState(D3DRS_STENCILMASK,            0xffffffff);
    g_d3d_device
->SetRenderState(D3DRS_STENCILWRITEMASK,    0xffffffff);
    g_d3d_device
->SetRenderState(D3DRS_STENCILZFAIL,        D3DSTENCILOP_KEEP);
    g_d3d_device
->SetRenderState(D3DRS_STENCILFAIL,            D3DSTENCILOP_KEEP);
    g_d3d_device
->SetRenderState(D3DRS_STENCILPASS,            D3DSTENCILOP_INCR);    // increment to 1

    
// position shadow
    D3DXVECTOR4 light_dir(0.707f-0.707f0.707f0.0f);
    D3DXPLANE    ground_plane(
0.0f-1.0f0.0f0.0f);    // xz plane

    D3DXMATRIX shadow_matrix;
    D3DXMatrixShadow(
&shadow_matrix, &light_dir, &ground_plane);

    D3DXMATRIX tran_matrix;
    D3DXMatrixTranslation(
&tran_matrix, g_teapot_pos.x, g_teapot_pos.y, g_teapot_pos.z);

    D3DXMATRIX world_matrix 
= tran_matrix * shadow_matrix;
    g_d3d_device
->SetTransform(D3DTS_WORLD, &world_matrix);

    
// alpha blend the shadow
    g_d3d_device->SetRenderState(D3DRS_ALPHABLENDENABLE,    TRUE);
    g_d3d_device
->SetRenderState(D3DRS_SRCBLEND,            D3DBLEND_SRCALPHA);
    g_d3d_device
->SetRenderState(D3DRS_DESTBLEND,            D3DBLEND_INVSRCALPHA);

    D3DMATERIAL9 material 
= init_material(BLACK, BLACK, BLACK, BLACK, 0.0f);
    material.Diffuse.a 
= 0.5f;    // 50% transparancy

    
// disable depth buffer so that z-fighting doesn't occur when we render the shadow
    
// on top of the floor.
    g_d3d_device->SetRenderState(D3DRS_ZENABLE, FALSE);
    
    g_d3d_device
->SetMaterial(&material);
    g_d3d_device
->SetTexture(0, NULL);

    g_teapot_mesh
->DrawSubset(0);

    
// restore render states
    g_d3d_device->SetRenderState(D3DRS_ZENABLE, TRUE);
    g_d3d_device
->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
    g_d3d_device
->SetRenderState(D3DRS_STENCILENABLE,     FALSE);    
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

LRESULT CALLBACK wnd_proc(HWND hwnd, UINT msg, WPARAM word_param, LPARAM long_param)
{
    
switch(msg)
    {
    
case WM_DESTROY:
        PostQuitMessage(
0);
        
break;

    
case WM_KEYDOWN:
        
if(word_param == VK_ESCAPE)
            DestroyWindow(hwnd);
        
break;
    }

    
return DefWindowProc(hwnd, msg, word_param, long_param);
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

int WINAPI WinMain(HINSTANCE inst, HINSTANCE, PSTR cmd_line, int cmd_show)
{
    
if(! init_d3d(inst, WIDTH, HEIGHT, true, D3DDEVTYPE_HAL, &g_d3d_device))
    {
        MessageBox(NULL, 
"init_d3d() - failed."0, MB_OK);
        
return 0;
    }

    
if(! setup())
    {
        MessageBox(NULL, 
"Steup() - failed."0, MB_OK);
        
return 0;
    }

    enter_msg_loop(display);

    cleanup();
    g_d3d_device
->Release();

    
return 0;
}

運行截圖:

下載源程序


posted on 2008-03-25 12:26 lovedday 閱讀(1110) 評論(0)  編輯 收藏 引用


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


公告

導航

統(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>
            欧美国产日本在线| 99香蕉国产精品偷在线观看| 伊人久久大香线蕉av超碰演员| 销魂美女一区二区三区视频在线| 久久精品欧洲| 亚洲国产精品www| 欧美日本一区二区高清播放视频| 亚洲麻豆av| 欧美在线高清| 亚洲人成网站999久久久综合| 欧美激情视频一区二区三区在线播放| 夜夜嗨av一区二区三区中文字幕| 校园春色国产精品| 亚洲成色www8888| 欧美视频在线一区| 久久黄色级2电影| 亚洲精品免费观看| 欧美一级成年大片在线观看| 激情欧美一区二区| 欧美日韩国产欧美日美国产精品| 亚洲无线视频| 亚洲国产精品成人| 性欧美xxxx视频在线观看| 在线观看国产一区二区| 欧美日韩视频一区二区| 欧美自拍偷拍午夜视频| 亚洲精品日韩精品| 久久一区二区三区超碰国产精品| av成人免费观看| 国产一区二区三区四区五区美女 | 久久福利电影| 日韩一二三区视频| 欧美aⅴ一区二区三区视频| 亚洲视频一区| 亚洲国产日韩美| 国产精品一区二区黑丝| 欧美成人免费在线| 欧美一区二区三区播放老司机 | 久久久久久网| 亚洲无线一线二线三线区别av| 免费在线观看一区二区| 性视频1819p久久| 99视频国产精品免费观看| 国产亚洲视频在线| 国产精品第一区| 欧美精品久久久久a| 久久这里只有| 午夜精品成人在线| 亚洲午夜精品久久久久久浪潮| 亚洲第一天堂无码专区| 久久―日本道色综合久久| 欧美一级淫片播放口| 制服丝袜亚洲播放| 亚洲免费高清| 亚洲国产高清自拍| 狠色狠色综合久久| 国产专区欧美精品| 国产日韩一区| 国产欧美日韩精品一区| 国产精品美女久久久| 欧美视频中文一区二区三区在线观看| 欧美大学生性色视频| 乱人伦精品视频在线观看| 久久久精品999| 久久精品一本| 久久久久se| 久久香蕉国产线看观看网| 欧美中文在线字幕| 久久久精品国产99久久精品芒果| 久久国产手机看片| 久久成人精品一区二区三区| 欧美一区二区黄| 久久久久久日产精品| 久久男人av资源网站| 久久欧美肥婆一二区| 久久青青草综合| 毛片精品免费在线观看| 欧美成年人视频网站| 母乳一区在线观看| 欧美激情a∨在线视频播放| 欧美乱在线观看| 国产精品v欧美精品∨日韩| 国产精品二区在线观看| 国产精品一区三区| 狠狠色狠狠色综合日日五| 尤物网精品视频| 亚洲巨乳在线| 亚洲一区二区三区视频播放| 亚洲欧美制服中文字幕| 久久av红桃一区二区小说| 久久精品女人| 亚洲电影免费观看高清完整版在线观看 | 亚洲专区一区二区三区| 欧美一区影院| 欧美成人午夜激情在线| 亚洲区在线播放| 亚洲新中文字幕| 久久久福利视频| 欧美日韩成人在线视频| 国产农村妇女毛片精品久久麻豆 | 欧美成人午夜激情视频| 欧美视频中文一区二区三区在线观看| 国产精品视频一二三| 黄色精品免费| 亚洲精品自在在线观看| 欧美伊人久久久久久午夜久久久久 | 中国av一区| 久久久www免费人成黑人精品| 欧美jizz19hd性欧美| 国产精品美女久久| 91久久综合| 欧美在线免费看| 亚洲理论电影网| 久久久国产精品一区二区三区| 欧美日本一道本| 伊人久久噜噜噜躁狠狠躁| 一区二区三区久久| 久久香蕉国产线看观看网| 亚洲人成网站999久久久综合 | 欧美一区二视频| 欧美精品一区二区三| 国产欧美日韩在线| 99热在线精品观看| 久久漫画官网| 一区二区三区欧美视频| 免费观看成人www动漫视频| 国产日韩欧美成人| 一区二区三区偷拍| 欧美大片一区二区| 香蕉成人久久| 国产精品卡一卡二卡三| 亚洲高清不卡| 久久亚洲春色中文字幕| 亚洲天堂av在线免费| 欧美成人免费小视频| 伊人久久av导航| 久久经典综合| 亚洲小视频在线观看| 欧美激情精品久久久久久蜜臀| 有坂深雪在线一区| 久久九九精品99国产精品| 亚洲视频高清| 欧美三级网页| 一区二区三区四区五区精品视频| 欧美成人激情视频免费观看| 午夜亚洲视频| 国产日韩精品一区二区三区在线 | 亚洲女人天堂av| 日韩小视频在线观看| 欧美成人免费网站| 91久久精品一区| 另类欧美日韩国产在线| 亚洲欧美日韩另类| 国产欧美精品在线播放| 午夜精品久久| 亚洲永久在线| 国产精品久久久久久户外露出| 一区二区免费在线观看| 亚洲精品一区二区三区四区高清 | 男女av一区三区二区色多| 欧美一级大片在线观看| 国产欧美一区二区三区久久| 欧美一级艳片视频免费观看| 一区二区三区精品| 国产精品日韩在线观看| 欧美亚洲一区二区在线观看| 亚洲一区二区免费在线| 国产精品亚洲综合久久| 久久精品官网| 久久精品毛片| 亚洲国产美女| 最新国产成人在线观看| 欧美日韩亚洲一区二区三区四区 | 欧美一区亚洲二区| 欧美一区在线直播| 激情欧美丁香| 亚洲第一主播视频| 欧美日韩一区二区视频在线观看| 亚洲一区二区视频| 亚洲欧美自拍偷拍| 精品99一区二区| 91久久精品国产91性色tv| 欧美精品日韩www.p站| 中文国产成人精品| 午夜精品久久99蜜桃的功能介绍| 国产一区二区三区四区三区四| 免费日韩av片| 欧美另类videos死尸| 欧美一级淫片播放口| 久久九九精品99国产精品| 亚洲人成网站999久久久综合| 亚洲伦理在线| 国产一区二区三区观看| 女主播福利一区| 欧美日韩精品久久久| 久久国产精品电影| 麻豆精品视频| 欧美一区二区三区婷婷月色 | 欧美精品91| 欧美一区国产在线|