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

天行健 君子當(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>
            久久久精品日韩| 亚洲手机在线| 黄色成人av| 久久久久国产一区二区三区| 欧美波霸影院| 鲁大师影院一区二区三区| 欧美va亚洲va香蕉在线| 久久精品国产成人| 国产一区日韩欧美| 日韩午夜电影在线观看| 午夜免费在线观看精品视频| 欧美天堂亚洲电影院在线播放| 好吊成人免视频| 欧美日韩三级视频| 日韩视频欧美视频| 一区二区视频免费完整版观看| 久久久91精品国产一区二区三区 | 亚洲欧美日韩视频一区| 日韩香蕉视频| 欲色影视综合吧| 欧美日韩国产123| 午夜精品国产更新| 久色婷婷小香蕉久久| 久久亚洲一区二区三区四区| 欧美 日韩 国产精品免费观看| 久久在线视频| 亚洲一区二区在线观看视频| 久久精品国产精品亚洲综合| 牛牛国产精品| 亚洲免费小视频| 最新成人在线| 欧美福利一区| 日韩午夜三级在线| 麻豆九一精品爱看视频在线观看免费| 久热精品视频在线免费观看| 欧美激情成人在线视频| 亚洲电影在线| 亚洲小视频在线| 亚洲高清色综合| 久久久久久9| 一本一本大道香蕉久在线精品| 久久综合伊人77777蜜臀| 国产一区三区三区| 亚洲午夜久久久久久尤物| 一区二区三区自拍| 午夜欧美精品久久久久久久| 亚洲免费在线精品一区| 久久免费高清| 久热精品视频在线免费观看| 亚洲欧美日韩天堂一区二区| 国产私拍一区| 樱桃视频在线观看一区| 欧美激情小视频| 麻豆久久婷婷| 欧美激情视频一区二区三区在线播放| 欧美精品18+| 正在播放日韩| 欧美一区在线视频| 亚洲第一中文字幕在线观看| 欧美电影在线播放| 夜夜精品视频一区二区| 六月婷婷久久| 久久精品噜噜噜成人av农村| 欧美在线视频在线播放完整版免费观看| 性欧美暴力猛交另类hd| 欧美一区午夜精品| 欧美日韩免费观看一区=区三区 | 亚洲乱码一区二区| 小处雏高清一区二区三区 | 国语精品中文字幕| 亚洲高清资源| 国产精品一区二区久激情瑜伽| 黄色av日韩| 亚洲成人资源| 欧美成年视频| 亚洲高清视频一区| 久久人人爽爽爽人久久久| 久久亚洲精品伦理| 久久亚裔精品欧美| 欧美v国产在线一区二区三区| 在线观看中文字幕亚洲| 久久影院亚洲| 亚洲区一区二| 欧美日韩免费在线视频| 亚洲免费一区二区| 久久天堂成人| 99视频在线精品国自产拍免费观看| 久久久精品国产一区二区三区 | 欧美高清在线播放| 欧美性猛交视频| 狠狠v欧美v日韩v亚洲ⅴ| 日韩视频一区二区三区| 狠狠操狠狠色综合网| 亚洲女人小视频在线观看| 母乳一区在线观看| 欧美午夜不卡视频| 美女日韩在线中文字幕| 午夜亚洲激情| 欧美成人免费在线| 亚洲免费在线| 欧美另类高清视频在线| 欧美高清一区二区| 久久久精彩视频| 欧美日韩在线不卡一区| 欧美福利电影网| 亚洲福利在线看| 亚洲精品一区在线| 一区二区电影免费在线观看| 亚洲精品欧美日韩专区| 欧美日韩伊人| 亚洲大片精品永久免费| 久久久亚洲精品一区二区三区| 亚洲欧美国产毛片在线| 午夜亚洲性色视频| 欧美午夜国产| 欧美久久99| 亚洲视频1区2区| 蜜臀99久久精品久久久久久软件| 国产精品午夜春色av| 亚洲免费高清视频| 午夜视黄欧洲亚洲| 亚洲国产高清aⅴ视频| 一区二区三区免费在线观看| 欧美日韩综合| 美女成人午夜| 先锋影音久久久| 亚洲人成7777| 久久全球大尺度高清视频| 一本色道久久99精品综合| 国产美女扒开尿口久久久| 欧美成人一区在线| 欧美在线国产精品| 亚洲第一精品夜夜躁人人爽| 欧美一区综合| 99热在线精品观看| 欧美日韩在线播| 欧美高清你懂得| 久久免费国产精品| 亚洲影院在线| 亚洲人成亚洲人成在线观看| 日韩视频精品在线| 在线观看日韩av电影| 小处雏高清一区二区三区| 亚洲免费av网站| 亚洲激情视频在线播放| 国内一区二区三区| 国产精品青草久久| 欧美理论电影在线播放| 欧美黄色一级视频| 欧美性猛交xxxx乱大交退制版| 久久久久一区二区三区| 久久精品国产亚洲一区二区| 亚洲小说欧美另类社区| 一区二区三区精品视频| 亚洲五月婷婷| 中文亚洲欧美| 久久福利电影| 99re66热这里只有精品3直播| 亚洲少妇自拍| 久久久水蜜桃| 欧美不卡激情三级在线观看| 欧美国产第二页| 欧美精彩视频一区二区三区| 欧美性视频网站| 国产午夜精品久久久久久久| 亚洲国产精品国自产拍av秋霞| 亚洲欧美日韩精品久久| 亚洲激情在线视频| 欧美a级一区二区| 久久精品国产77777蜜臀| 久久先锋影音| 欧美精品一区二区在线播放| 国产视频一区欧美| 一区二区三区精品久久久| 亚洲第一伊人| 久久一二三区| 亚洲国产mv| 最近中文字幕日韩精品 | 亚洲作爱视频| 亚洲精品视频二区| 免费成年人欧美视频| 中文av字幕一区| 欧美插天视频在线播放| 性高湖久久久久久久久| 美女网站在线免费欧美精品| 欧美三级电影大全| 好看不卡的中文字幕| 国产精品久久久久久亚洲毛片| 久久综合伊人| 欧美a级片网| 亚洲国产视频一区二区| 欧美伊人久久久久久午夜久久久久| 欧美激情在线免费观看| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲色诱最新| 国产亚洲欧美aaaa| 欧美福利电影网| 亚洲国产精品嫩草影院| 欧美黑人多人双交| 午夜精品视频一区|