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

天行健 君子當(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免费在线观看| 欧美国产日本在线| 裸体丰满少妇做受久久99精品| 久久精品视频在线| 久久亚洲影音av资源网| 久久中文精品| 亚洲电影视频在线| 亚洲国产欧美日韩另类综合| 99riav国产精品| 午夜在线成人av| 麻豆久久精品| 国产精品va在线播放| 狠狠色丁香久久婷婷综合_中| 亚洲高清视频一区二区| 亚洲天堂视频在线观看| 久久久久www| 亚洲精品国产视频| 欧美一区二区黄| 欧美国产亚洲精品久久久8v| 国产精品久久久久国产精品日日| 狠狠综合久久av一区二区小说| 亚洲九九九在线观看| 久久爱www久久做| 欧美激情一区三区| 午夜欧美精品| 欧美日韩免费观看一区二区三区| 国产午夜精品久久| 在线视频你懂得一区| 麻豆视频一区二区| 亚洲综合色自拍一区| 暖暖成人免费视频| 国模叶桐国产精品一区| 宅男噜噜噜66一区二区66| 久久在线精品| 午夜天堂精品久久久久| 欧美三级午夜理伦三级中文幕 | 欧美人成在线| 国产亚洲毛片在线| 亚洲一区中文| 亚洲精品无人区| 老牛影视一区二区三区| 国产情人节一区| 亚洲一区二区三区中文字幕| 欧美国产1区2区| 欧美激情网站在线观看| 亚洲精品久久久久久久久久久久久| 亚洲精品资源美女情侣酒店| 久久国产精品电影| 中文高清一区| 欧美午夜激情视频| 亚洲社区在线观看| 91久久精品久久国产性色也91| 久久精品亚洲| 国语精品一区| 久久伊人精品天天| 久久国产黑丝| 激情一区二区三区| 蜜桃久久av一区| 裸体女人亚洲精品一区| 在线观看视频欧美| 老司机久久99久久精品播放免费| 午夜电影亚洲| 国产日韩一区二区三区| 久久久91精品国产| 久久av免费一区| 在线欧美日韩精品| 欧美顶级少妇做爰| 欧美激情 亚洲a∨综合| 亚洲桃色在线一区| 亚洲伊人久久综合| 国产综合色一区二区三区 | 午夜一级久久| 亚洲欧美综合v| 国内综合精品午夜久久资源| 久久尤物视频| 欧美福利精品| 亚洲一区二区三区三| 亚洲欧美一区二区原创| 黄色成人在线| 亚洲日本久久| 国产嫩草一区二区三区在线观看 | 亚洲美女电影在线| 在线中文字幕一区| 国产自产在线视频一区| 亚洲第一黄色网| 欧美午夜免费电影| 久久久国产精品一区| 欧美电影打屁股sp| 亚洲欧美国产不卡| 久久久亚洲精品一区二区三区 | 欧美影院午夜播放| 久热这里只精品99re8久| 99热免费精品| 午夜精品视频一区| 亚洲精品国产精品国自产在线 | 亚洲美女中文字幕| 欧美日韩成人综合在线一区二区| 在线亚洲精品| 久久精品亚洲一区二区三区浴池| 亚洲国产高清一区| 在线视频欧美一区| 亚洲第一色中文字幕| 一区二区三区视频在线看| 一色屋精品视频免费看| 亚洲作爱视频| 亚洲激情午夜| 欧美一区激情| 亚洲综合色在线| 欧美成人免费大片| 久久久美女艺术照精彩视频福利播放 | 国产精品区一区二区三| 欧美大片一区二区三区| 国产伦精品一区二区三区四区免费 | 免费短视频成人日韩| 国产精品免费小视频| 亚洲国产一区二区在线| 国产在线观看一区| 中日韩在线视频| 一区二区三区欧美亚洲| 免费的成人av| 免费欧美高清视频| 黄色av成人| 久久久久久97三级| 久久久久国产精品麻豆ai换脸| 欧美视频一区二区三区四区| 亚洲欧洲日本国产| 亚洲精品乱码久久久久久蜜桃麻豆| 久久国产黑丝| 久久五月婷婷丁香社区| 国产偷久久久精品专区| 亚洲欧美成人一区二区在线电影| 9i看片成人免费高清| 欧美激情一区二区三区在线视频| 欧美国产日韩精品| 亚洲激情偷拍| 欧美激情视频在线免费观看 欧美视频免费一| 久久久久欧美精品| 激情综合色综合久久综合| 久久久久国产精品人| 久久久久久网址| 国语自产精品视频在线看| 欧美在线视频网站| 久久综合网络一区二区| 亚洲电影网站| 欧美电影美腿模特1979在线看| 亚洲国产欧美不卡在线观看| 亚洲精品网站在线播放gif| 欧美日本三区| 亚洲午夜精品一区二区| 欧美一激情一区二区三区| 亚洲深夜影院| 国产精品美女久久久久av超清| 一区二区三区国产在线观看| 亚洲一区欧美| 国产一区二区你懂的| 久久婷婷久久一区二区三区| 欧美成人免费播放| 一区二区国产精品| 国产欧美一区二区精品婷婷| 久久中文欧美| aa级大片欧美| 久久不射中文字幕| 亚洲国产精品黑人久久久| 欧美日韩精品在线视频| 性色av一区二区三区| 欧美刺激性大交免费视频| 亚洲香蕉网站| 亚洲成人在线网站| 欧美视频一区二区三区…| 久久久久久**毛片大全| 亚洲精选久久| 久久一综合视频| 亚洲在线观看视频| 在线日韩视频| 国产精品乱码一区二三区小蝌蚪| 久久久久久高潮国产精品视| 亚洲最快最全在线视频| 开元免费观看欧美电视剧网站| 亚洲美女精品久久| 黄色日韩精品| 国产精品一区在线播放| 欧美精品日韩一本| 久久久精品日韩欧美| 亚洲一区二区3| 亚洲精品一二| 亚洲第一精品电影| 久久精品一区二区| 亚洲视频综合在线| 亚洲人成绝费网站色www| 国产尤物精品| 国产香蕉97碰碰久久人人| 欧美图区在线视频| 欧美二区在线| 久久综合一区| 欧美日韩在线三区| 亚洲午夜高清视频| 亚洲尤物视频在线| 一本久久青青| 亚洲高清在线|