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

天行健 君子當(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)的角度。

 

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

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

通過(guò)物體的位置和物體的3個(gè)自身坐標(biāo)軸朝向(3個(gè)向量)同樣也可以完全定位模型,實(shí)際上在Direct3D程序中,模型的世界矩陣本身包含了模型的位置向量和3個(gè)方向向量,這些向量在世界矩陣中存儲(chǔ)的順序是:第一行是right向量,第二行是up向量,第三行是look向量,第四行是位置向量pos。通過(guò)函數(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)需要分別借助偏航、俯仰和橫滾矩陣來(lái)完成,這些矩陣可借助于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.

以下代碼具體說(shuō)明了實(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ù)的處理存在精度問(wèn)題,所以在向量旋轉(zhuǎn)計(jì)算過(guò)程中會(huì)帶來(lái)稍許的累加誤差。在經(jīng)過(guò)幾次旋轉(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 閱讀(1089) 評(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>
            欧美一区二区三区日韩| 中文日韩在线| 欧美777四色影视在线| 久久久www成人免费毛片麻豆| 亚洲视频福利| 午夜精品久久久久久久白皮肤| 亚洲尤物影院| 久久精品噜噜噜成人av农村| 久久国产精品久久久久久| 久久精品一区二区三区四区| 久久亚洲一区二区| 欧美激情导航| 国产麻豆日韩欧美久久| 在线观看精品视频| 一区二区日韩| 欧美一区在线看| 免费日韩av| 一本久久a久久精品亚洲| 欧美一级二级三级蜜桃| 男女精品视频| 国产精品一区视频网站| 亚洲国产精品久久久久秋霞蜜臀| 一区二区三区欧美在线观看| 久久九九99| 亚洲精品少妇网址| 久久精品国产精品亚洲| 欧美日韩国产成人在线| 国产在线播精品第三| 99精品国产福利在线观看免费 | 欧美不卡视频一区| av成人免费在线| 久久偷窥视频| 国产精品视频久久久| 亚洲国产欧美日韩精品| 性色一区二区三区| 亚洲精品影视| 久久亚洲综合色一区二区三区| 欧美午夜欧美| 日韩视频在线观看一区二区| 久久综合九色九九| 中文国产亚洲喷潮| 欧美激情在线播放| 亚洲国产精品悠悠久久琪琪| 欧美在线资源| 国产精品色婷婷| 香蕉国产精品偷在线观看不卡| 久久国产高清| 一本色道久久| 欧美日本一道本在线视频| 黄色国产精品一区二区三区| 香蕉久久夜色精品国产| 99精品视频免费全部在线| 美女黄毛**国产精品啪啪| 国产亚洲一区二区三区在线观看 | 欧美午夜剧场| 亚洲精品免费一二三区| 久久伊人精品天天| 久久er99精品| 1024成人网色www| 美日韩精品视频免费看| 久久精品99无色码中文字幕| 国产欧美精品xxxx另类| 欧美一级成年大片在线观看| 一区二区三区日韩精品视频| 欧美日韩激情网| 一区二区三区导航| 亚洲乱码国产乱码精品精可以看 | 亚洲国产高清在线| 久久精品一区| …久久精品99久久香蕉国产 | 国产精品中文字幕欧美| 午夜激情综合网| 亚洲欧美综合v| 一区二区亚洲欧洲国产日韩| 免费亚洲网站| 欧美日韩1区2区| 亚洲欧美日韩系列| 久久丁香综合五月国产三级网站| 黑人极品videos精品欧美裸| 美国十次了思思久久精品导航| 美国成人毛片| 一区二区三区精品在线 | 美女脱光内衣内裤视频久久网站| 在线成人免费视频| 亚洲福利精品| 国产精品国产福利国产秒拍| 欧美怡红院视频一区二区三区| 欧美一区二区国产| 亚洲黄色成人网| 中文国产成人精品| 伊人天天综合| 一区二区日韩精品| 国产一区二区三区直播精品电影| 欧美aa在线视频| 欧美三级韩国三级日本三斤| 欧美va亚洲va香蕉在线| 亚洲国产精品一区在线观看不卡| 欧美大片在线观看一区| 亚洲一区中文字幕在线观看| 午夜天堂精品久久久久| 最新日韩精品| 午夜一级久久| 一本久道综合久久精品| 香蕉久久精品日日躁夜夜躁| 91久久精品国产| 午夜精品久久久久久久蜜桃app| 亚洲国产精品99久久久久久久久| 一本色道久久加勒比88综合| 很黄很黄激情成人| 亚洲一区二区高清视频| 日韩视频在线免费观看| 久久久99爱| 欧美在线视频播放| 欧美日韩第一页| 欧美国产第二页| 国产综合av| 亚洲欧美日韩一区在线| 99视频有精品| 欧美成人精品一区二区| 久久久久久一区二区| 欧美午夜在线一二页| 亚洲黄色免费| 亚洲国产美女精品久久久久∴| 午夜在线一区二区| 午夜亚洲影视| 国产精品高清在线| 亚洲美女网站| 一卡二卡3卡四卡高清精品视频| 母乳一区在线观看| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美国内亚洲| 欧美韩日一区二区三区| 韩国三级在线一区| 久久成人精品视频| 久久精品国产亚洲精品| 国产精品手机视频| 亚洲一区视频在线| 欧美在线国产精品| 国产亚洲欧美一区二区| 先锋影音国产一区| 久久裸体艺术| 尤物99国产成人精品视频| 久久亚洲国产精品一区二区| 欧美a级理论片| 亚洲精品久久久久久久久久久 | 国产热re99久久6国产精品| 亚洲一二区在线| 欧美中文在线视频| 伊人久久婷婷色综合98网| 久久人人97超碰精品888| 女人香蕉久久**毛片精品| 亚洲电影在线看| 欧美黑人在线播放| 亚洲桃色在线一区| 久久国产婷婷国产香蕉| 精品成人乱色一区二区| 美脚丝袜一区二区三区在线观看 | 欧美有码视频| 麻豆精品视频在线观看视频| 亚洲一级在线观看| 国产精品久久久久久久久免费樱桃| 午夜精品免费在线| 亚洲国产导航| 久久国产精品久久国产精品| 欧美一区二区视频观看视频| 性欧美video另类hd性玩具| 亚洲美女黄网| 久久亚洲精选| 欧美日韩在线观看视频| 性做久久久久久| 久久亚洲电影| 午夜精品偷拍| 久久综合综合久久综合| 一区二区精品国产| 欧美一区网站| 一区二区日韩| 久久夜色撩人精品| 久久精品国产成人| 欧美精品福利在线| 久久免费高清视频| 国内精品视频一区| 一区二区三区视频观看| 亚洲国产导航| 免费在线亚洲欧美| avtt综合网| 美女精品在线| 一区二区三区四区精品| 国产欧美一区二区三区在线老狼 | 麻豆精品视频| 欧美电影免费网站| 欧美伊人精品成人久久综合97| 久久久国产精品一区| 欧美日韩不卡视频| 亚洲国产精品ⅴa在线观看| 国产精品久久一级| 卡一卡二国产精品| 亚洲无线一线二线三线区别av| 亚洲第一级黄色片| 老鸭窝毛片一区二区三区 | 亚洲图片欧美日产|