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

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

使用.x文件模型(2)

在三維圖形程序中的一個(gè)模型對(duì)應(yīng)空間中的一個(gè)物體,在現(xiàn)實(shí)世界中要完全定位一個(gè)物體需要6個(gè)參數(shù),物體位置坐標(biāo)的3個(gè)分量(x, y, z)和3個(gè)歐拉角(偏航角yaw,俯仰角pitch,側(cè)傾角roll)。

3個(gè)歐拉角的定義為:

(1)偏航角:物體繞自身y軸(即上向量up)旋轉(zhuǎn)的角度。

(2)俯仰角:物體繞自身x軸(即右向量right)旋轉(zhuǎn)的角度。

(3)側(cè)傾角:物體繞自身z軸(即前向量look)旋轉(zhuǎn)的角度。

 

通過矩陣實(shí)現(xiàn)模型旋轉(zhuǎn)

在三維圖形程序中模型在世界空間中的位置和姿態(tài)都是通過通過其世界矩陣來表示的,所以要在程序中確定一個(gè)模型的位置和姿態(tài),就是將控制其狀態(tài)的6個(gè)參數(shù)應(yīng)用到其世界矩陣中。

通過物體的位置和物體的3個(gè)自身坐標(biāo)軸朝向(3個(gè)向量)同樣也可以完全定位模型,實(shí)際上在Direct3D程序中,模型的世界矩陣本身包含了模型的位置向量和3個(gè)方向向量,這些向量在世界矩陣中存儲(chǔ)的順序是:第一行是right向量,第二行是up向量,第三行是look向量,第四行是位置向量pos。通過函數(shù)D3DXMatrixIdentity()將矩陣設(shè)置為單位矩陣,同時(shí)也將4個(gè)向量都設(shè)置為默認(rèn)值,因此right向量為(1.0f, 0.0f, 0.0f),up向量為(0.0, 1.0f, 0.0f),look向量為(0.0f, 0.0f, 1.0f),pos向量為(0.0f, 0.0f, 0.0f)。這時(shí)模型位于世界坐標(biāo)系原點(diǎn),并且朝向和世界坐標(biāo)系的3個(gè)坐標(biāo)軸方向相同。

要改變模型的狀態(tài),就是移動(dòng)物體到指定位置,旋轉(zhuǎn)物體改變其朝向。旋轉(zhuǎn)一個(gè)物體實(shí)質(zhì)上就是將look、up、right向量中的兩個(gè)繞另一個(gè)作旋轉(zhuǎn)。比如要橫滾物體,就需要將up和right向量繞look向量旋轉(zhuǎn);要使物體產(chǎn)生俯仰,必須將up和look向量繞right向量旋轉(zhuǎn);要使物體產(chǎn)生偏航,必須將look和right向量繞up向量旋轉(zhuǎn)。

向量的旋轉(zhuǎn)需要分別借助偏航、俯仰和橫滾矩陣來完成,這些矩陣可借助于D3DXMatrixRotationAxis()函數(shù)產(chǎn)生,該函數(shù)的聲明如下:

Builds a matrix that rotates around an arbitrary axis.

D3DXMATRIX * D3DXMatrixRotationAxis(
D3DXMATRIX * pOut,
CONST D3DXVECTOR3 * pV,
FLOAT Angle
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
pV
[in] Pointer to the arbitrary axis. See D3DXVECTOR3.
Angle
[in] Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin.

Return Values

Pointer to a D3DXMATRIX structure rotated around the specified axis.

Remarks

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixRotationAxis function can be used as a parameter for another function.

有了偏航、俯仰和橫滾矩陣,就可以使用函數(shù)D3DXVec3TransformCoord()完成這種向量旋轉(zhuǎn)的計(jì)算,該函數(shù)的聲明如下:

Transforms a 3D vector by a given matrix, projecting the result back into w = 1.

D3DXVECTOR3 * D3DXVec3TransformCoord(
D3DXVECTOR3 * pOut,
CONST D3DXVECTOR3 * pV,
CONST D3DXMATRIX * pM
);

Parameters

pOut
[in, out] Pointer to the D3DXVECTOR3 structure that is the result of the operation.
pV
[in] Pointer to the source D3DXVECTOR3 structure.
pM
[in] Pointer to the source D3DXMATRIX structure.

Return Values

Pointer to a D3DXVECTOR3 structure that is the transformed vector.

Remarks

This function transforms the vector, pV (x, y, z, 1), by the matrix, pM, projecting the result back into w=1.

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXVec3TransformCoord function can be used as a parameter for another function.

以下代碼具體說明了實(shí)現(xiàn)這種旋轉(zhuǎn)的核心內(nèi)容:

	static D3DXMATRIX mat_around_right, mat_around_up, mat_around_look;
	D3DXMatrixRotationAxis(&mat_around_up, &up, angle_around_up);
D3DXVec3TransformCoord(&look, &look, &mat_around_up);
D3DXVec3TransformCoord(&right, &right, &mat_around_up);
	D3DXMatrixRotationAxis(&mat_around_look, &look, angle_around_look);	
D3DXVec3TransformCoord(&right, &right, &mat_around_look);
D3DXVec3TransformCoord(&up, &up, &mat_around_look);
	D3DXMatrixRotationAxis(&mat_around_right, &right, angle_around_right);	
D3DXVec3TransformCoord(&look, &look, &mat_around_right);
D3DXVec3TransformCoord(&up, &up, &mat_around_right);

由于計(jì)算機(jī)對(duì)浮點(diǎn)數(shù)的處理存在精度問題,所以在向量旋轉(zhuǎn)計(jì)算過程中會(huì)帶來稍許的累加誤差。在經(jīng)過幾次旋轉(zhuǎn)之后,這些舍入誤差將使3個(gè)向量不再相互垂直。以下代碼用于歸一化所有向量并使其互相垂直。

	D3DXVec3Normalize(&look, &look);
D3DXVec3Cross(&right, &up, &look);
D3DXVec3Normalize(&right, &right);
D3DXVec3Cross(&up, &look, &right);
D3DXVec3Normalize(&up, &up);

 

示例程序演示了使用矩陣旋轉(zhuǎn)一個(gè)飛機(jī)模型,程序運(yùn)行時(shí)按下"D"和"A"鍵,可使飛機(jī)模型繞look向量旋轉(zhuǎn);按下"S"和"W"鍵,可使飛機(jī)模型繞right向量旋轉(zhuǎn);按下"Q"和"E"鍵,可使飛機(jī)模型繞up向量旋轉(zhuǎn);按下"F"和"V"鍵,可使飛機(jī)模型向前和向后運(yùn)動(dòng)。

源程序:

#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;

BYTE                    g_keys[
256];
D3DXMATRIX                g_mat_world;

void setup_world_matrix()
{
    
static long  previous_time = 0;
    
static float elapsed_time  = 0.0f;

    elapsed_time  
= (timeGetTime() - previous_time) / 1000.0f;
    previous_time 
= timeGetTime();

    
float angle_around_right = 0.0f, angle_around_up = 0.0f, angle_around_look = 0.0f;

    
if(g_keys['D'])    angle_around_look  -= 3 * elapsed_time;
    
if(g_keys['A'])    angle_around_look  += 3 * elapsed_time;
    
if(g_keys['S'])    angle_around_right -= 3 * elapsed_time;
    
if(g_keys['W'])    angle_around_right += 3 * elapsed_time;
    
if(g_keys['Q'])    angle_around_up       -= 3 * elapsed_time;
    
if(g_keys['E'])    angle_around_up       += 3 * elapsed_time;

    
static D3DXVECTOR3 right, up, look, pos;

    
// save old model pos

    right.x 
= g_mat_world._11;
    right.y 
= g_mat_world._12;
    right.z 
= g_mat_world._13;

    up.x    
= g_mat_world._21;
    up.y    
= g_mat_world._22;
    up.z    
= g_mat_world._23;

    look.x    
= g_mat_world._31;
    look.y    
= g_mat_world._32;
    look.z    
= g_mat_world._33;

    pos.x    
= g_mat_world._41;
    pos.y    
= g_mat_world._42;
    pos.z    
= g_mat_world._43;    

    
// now, calculate ratation matrix.

    
static D3DXMATRIX mat_around_right, mat_around_up, mat_around_look;

    D3DXMatrixRotationAxis(
&mat_around_up, &up, angle_around_up);
    D3DXVec3TransformCoord(
&look,  &look,  &mat_around_up);
    D3DXVec3TransformCoord(
&right, &right, &mat_around_up);

    D3DXMatrixRotationAxis(
&mat_around_look, &look, angle_around_look);    
    D3DXVec3TransformCoord(
&right, &right, &mat_around_look);
    D3DXVec3TransformCoord(
&up,    &up,    &mat_around_look);

    D3DXMatrixRotationAxis(
&mat_around_right, &right, angle_around_right);    
    D3DXVec3TransformCoord(
&look,  &look,  &mat_around_right);
    D3DXVec3TransformCoord(
&up,    &up,    &mat_around_right);

    
// normalize look, right, up to avoid float calculation error

    D3DXVec3Normalize(
&look, &look);
    D3DXVec3Cross(
&right, &up, &look);
    D3DXVec3Normalize(
&right, &right);
    D3DXVec3Cross(
&up, &look, &right);
    D3DXVec3Normalize(
&up, &up);

    
// update model pos

    g_mat_world._11 
= right.x;
    g_mat_world._12 
= right.y;
    g_mat_world._13 
= right.z;

    g_mat_world._21    
= up.x;
    g_mat_world._22    
= up.y;
    g_mat_world._23    
= up.z;

    g_mat_world._31 
= look.x;
    g_mat_world._32 
= look.y;
    g_mat_world._33 
= look.z;

    
// move model forward or backward

    
if(g_keys['F'])
    {
        g_mat_world._41 
+= 30 * elapsed_time * look.x;
        g_mat_world._42 
+= 30 * elapsed_time * look.y;
        g_mat_world._43 
+= 30 * elapsed_time * look.z;
    }

    
if(g_keys['V'])
    {
        g_mat_world._41 
-= 30 * elapsed_time * look.x;
        g_mat_world._42 
-= 30 * elapsed_time * look.y;
        g_mat_world._43 
-= 30 * elapsed_time * look.z;
    }

    g_device
->SetTransform(D3DTS_WORLD, &g_mat_world);
}

void setup_view_proj_matrix()
{
    
// setup view matrix

    D3DXVECTOR3 eye(
0.0f10.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("airplane.x", D3DXMESH_MANAGED, g_device, NULL, &material_buffer, NULL,
                                
&g_num_materials, &g_mesh)))
    {
        MessageBox(NULL, 
"Could not find airplane.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;

    D3DXMatrixIdentity(
&g_mat_world);
    setup_view_proj_matrix();    

    g_device
->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    g_device
->SetTextureStageState(0, D3DTSS_COLOROP,    D3DTOP_SELECTARG1);
    
    
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();

    
for(DWORD i = 0; i < g_num_materials; i++)
    {
        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:
        g_keys[wParam] 
= 1

        
if(wParam == VK_ESCAPE)
            DestroyWindow(hwnd);

        
break;

    
case WM_KEYUP:
        g_keys[wParam] 
= 0;
        
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-09 14:30 lovedday 閱讀(1086) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   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>
            亚洲精品美女在线| 激情久久久久久久久久久久久久久久 | 9l视频自拍蝌蚪9l视频成人 | 亚洲欧美成人一区二区三区| 这里只有精品丝袜| 亚洲视屏一区| 欧美一级播放| 欧美.www| 国产精品一级| 亚洲第一区在线观看| 99国产精品私拍| 亚洲欧美色一区| 欧美暴力喷水在线| 一区二区av在线| 久久久久.com| 国产精品爱久久久久久久| 国产精品国产亚洲精品看不卡15| 国产精品a级| 一区二区三区在线视频观看| 日韩视频不卡中文| 久久成人国产精品| 亚洲激情视频在线播放| 在线视频欧美一区| 免费观看一区| 国产欧美一区二区白浆黑人| 亚洲黄色精品| 久久国产精品毛片| 91久久国产综合久久蜜月精品| 在线综合亚洲欧美在线视频| 久久久午夜精品| 国产精品乱人伦一区二区| 在线观看日韩| 欧美一区激情| 宅男噜噜噜66国产日韩在线观看| 欧美亚洲在线播放| 亚洲毛片视频| 欧美mv日韩mv国产网站app| 国产精品理论片| 99re66热这里只有精品4| 久久久天天操| 亚洲欧美中文字幕| 欧美视频在线不卡| 在线日韩视频| 久久色在线观看| 亚洲男人的天堂在线| 欧美精品在线观看| 亚洲第一主播视频| 国产麻豆91精品| 国内精品嫩模av私拍在线观看 | 一区二区欧美在线观看| 亚洲国产一区二区三区a毛片| 亚洲一级一区| 欧美激情自拍| 欧美日韩一区二区在线播放| 亚洲国产第一页| 欧美亚洲一区在线| 一本一道久久综合狠狠老精东影业 | 欧美三级电影大全| 亚洲最新在线| 亚洲欧洲日本一区二区三区| 久久综合国产精品| 一区二区在线看| 噜噜噜噜噜久久久久久91| 性欧美在线看片a免费观看| 国产精品网红福利| 麻豆国产精品va在线观看不卡| 国产精品网站在线播放| 亚洲一区黄色| 亚洲女女女同性video| 国产精品日日摸夜夜摸av| 午夜精彩国产免费不卡不顿大片| 一区二区三区精密机械公司 | 一区二区三区视频在线| 亚洲国产成人在线| 欧美精品一区二区三区久久久竹菊 | 亚洲先锋成人| 午夜国产欧美理论在线播放| 国产欧美日韩不卡| 久久久视频精品| 欧美插天视频在线播放| 欧美一区二区三区免费观看视频| 国产精品美女一区二区在线观看| 性做久久久久久久久| 欧美在线视频免费观看| 亚洲黄色影院| 中国成人亚色综合网站| 国产一区二区三区高清播放| 另类天堂av| 欧美日韩精品一区视频 | 136国产福利精品导航| 亚洲国产精品成人精品| 欧美日韩伦理在线| 欧美一区免费视频| 美女脱光内衣内裤视频久久影院| 一本色道久久综合亚洲精品按摩| 在线视频你懂得一区二区三区| 国产一区观看| 亚洲精品一区二区三区樱花| 国产一区二区三区奇米久涩 | 亚洲欧洲一区二区三区在线观看| 欧美日韩一区在线观看| 久久久综合视频| 欧美日韩另类字幕中文| 久久亚洲国产精品一区二区| 欧美精品久久久久久| 久久久久久久网| 欧美亚洲第一区| 亚洲国产精品久久久久婷婷884| 国产精品久久久久久久久久直播 | 亚洲精品国产精品乱码不99| 国产香蕉97碰碰久久人人| 亚洲精品国产精品乱码不99按摩| 国产日韩欧美日韩| 亚洲少妇诱惑| 日韩一区二区精品| 久久综合九色综合网站| 欧美一区二区三区视频在线观看| 免费久久精品视频| 久久婷婷丁香| 国产精品亚洲综合天堂夜夜| 亚洲精品国产精品国自产在线| 99av国产精品欲麻豆| 欧美激情国产日韩| 久久在线免费视频| 国产精品卡一卡二卡三| 亚洲精品日韩欧美| 亚洲精品乱码久久久久久按摩观| 欧美一区久久| 性娇小13――14欧美| 欧美电影免费观看高清完整版| 国产精品剧情在线亚洲| 一本色道久久综合亚洲二区三区 | 久久精品男女| 麻豆成人在线观看| 黄色成人在线网站| 久久九九全国免费精品观看| 久久av在线| 国产在线视频不卡二| 欧美中文字幕在线播放| 久久久久久成人| 黄色欧美日韩| 久久综合色婷婷| 亚洲国产欧美久久| 在线综合视频| 欧美视频日韩视频在线观看| av成人老司机| 欧美综合第一页| 国语自产在线不卡| 久久在线视频| 最新国产の精品合集bt伙计| 9久re热视频在线精品| 欧美视频一区| 欧美一区二区三区免费看| 蜜臀av国产精品久久久久| 亚洲电影免费观看高清完整版在线 | 亚洲人成网站色ww在线| 夜夜嗨av一区二区三区中文字幕| 欧美区在线播放| 亚洲免费综合| 欧美电影免费观看网站| 99日韩精品| 国产视频一区二区在线观看| 久久九九久久九九| 日韩视频在线观看国产| 欧美主播一区二区三区| 一区在线视频| 欧美日韩国产片| 久久动漫亚洲| 亚洲精品少妇网址| 久久不射2019中文字幕| 亚洲人成网在线播放| 国产精品日韩二区| 免费影视亚洲| 亚洲免费小视频| 亚洲高清视频在线观看| 欧美在线观看天堂一区二区三区| 在线观看91精品国产麻豆| 欧美日韩视频在线观看一区二区三区| 亚洲一区免费看| 亚洲激情偷拍| 你懂的国产精品永久在线| 午夜精品久久久久久久99水蜜桃 | 亚洲一区视频在线| 亚洲精品欧洲| 国模叶桐国产精品一区| 亚洲欧美日韩高清| 欧美私人啪啪vps| 一本久道久久综合狠狠爱| 国产精品99久久久久久www| 欧美顶级少妇做爰| 亚洲免费视频成人| 亚洲大黄网站| 欧美一区二区三区在| 亚洲精品一区二区在线| 国产精品免费观看在线| 欧美激情久久久久| 久久久久久999| 亚洲一区影音先锋| 亚洲精品一区二区三区四区高清| 久热这里只精品99re8久|