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

天行健 君子當(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>
            午夜精品久久| 亚洲网站在线观看| 亚洲激情欧美| 精品成人乱色一区二区| 久久av一区二区三区漫画| 麻豆成人精品| 亚洲视频一区二区| 欧美成人精品h版在线观看| 亚洲精品黄色| 久久久久在线观看| 亚洲国产精品免费| 亚洲国产成人不卡| 久久久欧美精品| 亚洲伦理在线观看| 一区二区三区高清视频在线观看| 国产精品社区| 欧美高清日韩| 亚洲欧美激情一区二区| 亚洲激情在线观看| 欧美一区二区三区精品| 亚洲国产影院| 精品av久久久久电影| 国产亚洲福利一区| 亚洲视频免费观看| 一区二区高清视频| 午夜久久久久| 一级成人国产| 亚洲美女诱惑| 亚洲视频精选| 一区二区三区不卡视频在线观看| 在线精品观看| 在线视频成人| 亚洲国产另类 国产精品国产免费| 欧美亚洲视频| 亚洲美女黄网| 亚洲茄子视频| 亚洲欧洲在线免费| 亚洲精选大片| 一本久久a久久精品亚洲| 亚洲国产精品高清久久久| 国产亚洲亚洲| 国内精品久久久久久| 激情校园亚洲| 亚洲第一在线综合网站| 亚洲尤物视频在线| 欧美尤物一区| 亚洲电影成人| 性欧美18~19sex高清播放| 亚洲人永久免费| 一区二区久久久久| 亚洲尤物在线| 麻豆亚洲精品| 国产欧美日韩亚洲精品| 激情六月婷婷综合| 一区二区三区蜜桃网| 久久精品成人一区二区三区| 免费看成人av| 一区电影在线观看| 久久影院午夜论| 欧美日韩情趣电影| 国产一区二区三区在线观看免费视频 | 欧美电影免费观看网站| 欧美日韩精品欧美日韩精品| 国产精品午夜春色av| 136国产福利精品导航网址应用| 一本大道久久a久久精二百| 欧美一区二区三区在线看| 亚洲国产成人久久| 亚洲欧美日韩国产综合| 欧美高清在线| 在线观看日韩欧美| 久久久www免费人成黑人精品| 久久av红桃一区二区小说| 亚洲免费视频网站| 亚洲国产一区二区精品专区| 亚洲免费视频网站| 欧美日韩人人澡狠狠躁视频| 亚洲第一中文字幕| 久久嫩草精品久久久精品一 | 亚洲一区免费在线观看| 美女任你摸久久| 亚洲国产高清一区二区三区| 久久精品日韩一区二区三区| 亚洲天堂久久| 欧美成人综合网站| 在线观看国产日韩| 欧美黄污视频| 欧美激情视频网站| 亚洲色图综合久久| 亚洲精品乱码久久久久久| 欧美区高清在线| 亚洲一区欧美| 欧美一区网站| 亚洲高清视频在线观看| 亚洲国产va精品久久久不卡综合| 欧美成年人在线观看| 99热在线精品观看| 亚洲午夜激情在线| 国产乱码精品一区二区三区五月婷| 午夜在线精品偷拍| 久久人体大胆视频| 亚洲午夜精品久久久久久浪潮| 一区二区三区日韩| 伊大人香蕉综合8在线视| 久久成人这里只有精品| 久久精品中文字幕免费mv| 亚洲高清一区二| 亚洲午夜精品视频| 在线看片第一页欧美| 亚洲午夜国产一区99re久久 | 午夜在线视频观看日韩17c| 好男人免费精品视频| 亚洲美女黄网| 亚洲黄色天堂| 亚洲视频在线观看网站| 久久理论片午夜琪琪电影网| 国产精品爽爽爽| 欧美激情一区二区三区在线| 国产精品久久久久毛片软件| 欧美成人精品h版在线观看| 国产亚洲欧美一级| 亚洲永久字幕| 欧美一区不卡| 国产精品久久久久久久久久三级| 亚洲激情av在线| 亚洲精品影视| 欧美激情 亚洲a∨综合| 亚洲黑丝在线| 99re6热只有精品免费观看| 麻豆精品视频在线| 亚洲福利精品| 亚洲一区二区三区在线视频| 国产精品videossex久久发布| 亚洲国产高清视频| 日韩亚洲综合在线| 欧美日韩一区在线观看| 中文亚洲字幕| 先锋影音久久| 狠狠色狠色综合曰曰| 久久在线视频| 亚洲精品乱码久久久久久黑人 | 欧美在线高清视频| 久久夜色精品国产欧美乱极品| 亚洲高清不卡在线| 欧美激情一区二区三区| 一本一本a久久| 久久成人一区| 亚洲蜜桃精久久久久久久| 国产精品v亚洲精品v日韩精品 | 国产日韩欧美精品在线| 久久精品一区四区| 日韩亚洲欧美在线观看| 欧美在线视频免费观看| 亚洲国产日韩欧美综合久久| 国产精品久久久久国产精品日日 | 女人天堂亚洲aⅴ在线观看| 亚洲欧洲精品一区二区| 欧美日韩在线一区二区| 久久久久久久性| 亚洲一区二区三区激情| 欧美成人午夜激情| 欧美一区二区视频免费观看| 亚洲欧洲日韩女同| 国产日韩精品视频一区二区三区| 欧美乱妇高清无乱码| 免费国产一区二区| 久久久免费观看视频| 久久精品在线视频| 羞羞答答国产精品www一本| 亚洲淫性视频| 亚洲欧美日韩精品在线| 99精品国产热久久91蜜凸| 欧美11—12娇小xxxx| 久久综合色天天久久综合图片| 欧美尤物一区| 久久免费一区| 欧美ab在线视频| 老巨人导航500精品| 久久久免费av| 欧美成在线视频| 最新日韩在线| 亚洲一区在线观看免费观看电影高清| 亚洲三级观看| 亚洲午夜精品福利| 欧美激情国产精品| 亚洲精品久久7777| 国产精品99久久久久久白浆小说 | 欧美日韩亚洲一区三区 | 欧美福利在线观看| 欧美三区免费完整视频在线观看| 国产精品xnxxcom| 国产在线精品成人一区二区三区| 国产综合av| 亚洲精品国产精品国自产在线| 一区二区三区产品免费精品久久75| 亚洲综合精品自拍| 欧美成人一区二区三区| 亚洲午夜在线观看视频在线| 亚洲精品在线观看免费| 亚洲免费一级电影|