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

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

【ZT】DXUT中控件、文本繪制、攝像機(jī)的使用

 
概要

這個指南涵蓋了更多DXUT的高級應(yīng)用. 這個指南里的大部分功能是可選的, 為了以最小的代價來增強(qiáng)你的應(yīng)用程序. DXUT提供了一個簡單的基于GUI系統(tǒng)的精靈和一個設(shè)備設(shè)置對話框. 另外, 它還提供了一些攝像機(jī)類.

這個指南的結(jié)果是一個具有完善功能的GUI 用于更改設(shè)備和場景的設(shè)置. 它將有按鈕, 滑塊, 和文本來示范這些功能.



DXUT 攝像機(jī)

DXUT中的CModelViewerCamera 類可以簡單的的管理視圖變換和透視變換, 就像GUI 的功能一樣.

    CModelViewerCamera g_Camera;  // A model viewing camera

攝像機(jī)類提供的第一個功能是創(chuàng)建視圖和透視矩陣. 有了這個攝像機(jī),沒有必要擔(dān)心這些矩陣. 反而, 你可以指定你在哪, 你看著什么,還有窗口的大小. 然后, 把這些參數(shù)傳遞給攝像機(jī)對象, 它會在后臺創(chuàng)建這些矩陣.

這里我們設(shè)置攝像機(jī)的一部分視圖參數(shù). 我們指定我們在哪,和我們看著什么.

    // Initialize the camera
    D3DXVECTOR3 Eye( 0.0f, 0.0f, -800.0f );
    D3DXVECTOR3 At( 0.0f, 0.0f, 0.0f );
    g_Camera.SetViewParams( &Eye, &At );


接下來,我們指定攝像機(jī)的投影參數(shù). 也就是說, 我們需要提供觀察角度,縱橫比, 和視圖截錐的近、遠(yuǎn)裁剪面. 這些信息跟之前的指南提供的一樣, 不同的是, 你不必?fù)?dān)心怎么去創(chuàng)建矩陣.

    // Setup the camera's projection parameters
    float fAspectRatio = pBackBufferSurfaceDesc->Width / (FLOAT)pBackBufferSurfaceDesc->Height;
    g_Camera.SetProjParams( D3DX_PI/4, fAspectRatio, 0.1f, 5000.0f );
    g_Camera.SetWindow( pBackBufferSurfaceDesc->Width, p00BackBufferSurfaceDesc->Height );

另外, 這個攝像機(jī)還封裝了簡單的鼠標(biāo)反饋. 在這里, 我們指定三個鼠標(biāo)按鍵給提供的鼠標(biāo)操作: 模型旋轉(zhuǎn), 放縮, 還有攝像機(jī)旋轉(zhuǎn).試著編譯工程并用每個按鍵體會一下各個操作.

    g_Camera.SetButtonMasks( MOUSE_LEFT_BUTTON, MOUSE_WHEEL, MOUSE_MIDDLE_BUTTON );

在這個按鈕組的基礎(chǔ)上, 攝像機(jī)會監(jiān)聽這些輸入并產(chǎn)生相應(yīng)效果. 為了響應(yīng)用戶輸入, 需要加入一個監(jiān)聽到MsgProc回調(diào)函數(shù)(DXUT消息處理函數(shù)).

    // Pass all remaining windows messages to camera so it can respond to user input
    g_Camera.HandleMessages( hWnd, uMsg, wParam, lParam );

最后,在把所有數(shù)據(jù)都輸入攝像機(jī)后, 就是取出真正的變換矩陣的時候了. 這里我們用相關(guān)函數(shù)獲取投影矩陣和視圖矩陣. 攝像機(jī)對象會自己計(jì)算這些矩陣.

    g_pProjectionVariable->SetMatrix( (float*)g_Camera.GetProjMatrix() );
    g_pViewVariable->SetMatrix( (float*)g_Camera.GetViewMatrix() );

 

DXUT 對話框

用戶交互可以用CDXUTDialog來實(shí)現(xiàn), 它在一個包含控件的對話框里接受用戶輸入,并且通過程序句柄傳遞它們. 首先, 對話框類要實(shí)例化, 然后每個單獨(dú)的控件才能加入.

在這個指南里, 有兩個對話框會被加入, 一個叫 g_HUD跟D3D10示例共享相同的代碼, 另一個叫 g_SampleUI 用于顯示函數(shù)細(xì)節(jié)給這個指南. 第二個對話框用來控制模型的"胖瘦",就是設(shè)置一個變量傳遞給shaders.

    CDXUTDialog g_HUD;      // manages the 3D UI
    CDXUTDialog g_SampleUI; // dialog for sample specific controls

這些對話框被CDXUTDialogResourceManager控制著.這個管理程序會在對話框之間傳遞消息并處理共享資源.

    CDXUTDialogResourceManager g_DialogResourceManager; // manager for shared resources of dialogs

最后, 一些回調(diào)函數(shù)與GUI處理的實(shí)際消息相關(guān)聯(lián). 這個函數(shù)用于處理控件間的交互.

    void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext );


 

對話框初始化

既然已經(jīng)介紹了許多有用的東西, 那么需要被初始化, 這個指南將這些模塊的真正初始化轉(zhuǎn)移到一個單獨(dú)的函數(shù), 叫 InitApp().

每個對話框的控件被初始化就是在這個函數(shù)里. 每個對話框都需要調(diào)用它的初始化函數(shù), 并傳遞給資源管理者來指定把控件供給誰. 同樣, 它們設(shè)置回調(diào)函數(shù)來處理GUI 響應(yīng). 既然這樣, 這個相關(guān)的回調(diào)函數(shù)是 OnGUIEvent.

    g_HUD.Init( &g_DialogResourceManager );
    g_SampleUI.Init( &g_DialogResourceManager );
    g_HUD.SetCallback( OnGUIEvent );
    g_SampleUI.SetCallback( OnGUIEvent );

在它們被初始化后, 每個都對話框可以加入它們想要使用的控件. 對話框 HUD加入了3個按鈕用于基本功能: 切換全屏, 切換引用 (軟件) 渲染器, 和改變設(shè)備.要加入一個按鈕, 你要指定你想要使用的IDC 標(biāo)識符, 一個用于顯示的字符串, 坐標(biāo), 寬和高, 還有可選的與它關(guān)聯(lián)的熱鍵. 熱鍵可以用鍵盤快速地開關(guān)這些按鈕.

注意指定的坐標(biāo)與對話框的定位相關(guān).

    int iY = 10; 
    g_HUD.AddButton( IDC_TOGGLEFULLSCREEN, L"Toggle full screen", 35, iY, 125, 22 );
    g_HUD.AddButton( IDC_TOGGLEREF, L"Toggle REF (F3)", 35, iY += 24, 125, 22 );
    g_HUD.AddButton( IDC_CHANGEDEVICE, L"Change device (F2)", 35, iY += 24, 125, 22, VK_F2 );

同樣對于sample UI, 加入了這些控件,一個靜態(tài)文本,一個滑塊, 還有一個復(fù)選按鈕.
傳遞給靜態(tài)文本的參數(shù)是IDC 標(biāo)識符,字符串,坐標(biāo), 和寬高.
滑塊的參數(shù)是IDC 標(biāo)識符,字符串,坐標(biāo), 和寬高, 還有滑塊的最大最小值, 最后是存儲結(jié)果的變量.
復(fù)選按鈕包括IDC標(biāo)識符,一個字符串標(biāo)簽,wf坐標(biāo), 寬高,還有存儲結(jié)果的布爾值.

    iY = 10;
    WCHAR sz[100];
    iY += 24;
    StringCchPrintf( sz, 100, L"Puffiness: %0.2f", g_fModelPuffiness ); 
    g_SampleUI.AddStatic( IDC_PUFF_STATIC, sz, 35, iY += 24, 125, 22 );
    g_SampleUI.AddSlider( IDC_PUFF_SCALE, 50, iY += 24, 100, 22, 0, 2000, (int)(g_fModelPuffiness*100.0f) );
    
    iY += 24;
    g_SampleUI.AddCheckBox( IDC_TOGGLESPIN, L"Toggle Spinning", 35, iY += 24, 125, 22, g_bSpinning );


一旦初始化了, 這個對話框要顯示在屏幕上. 這個由 OnD3D10ResizedSwapChain 調(diào)用來完成,屏幕坐標(biāo)每次改變這個交換鏈會重建 (可能由于窗口大小的變化).

    g_HUD.SetLocation( pBackBufferSurfaceDesc->Width-170, 0 );
    g_HUD.SetSize( 170, 170 );
    g_SampleUI.SetLocation( pBackBufferSurfaceDesc->Width-170, pBackBufferSurfaceDesc->Height-300 );
    g_SampleUI.SetSize( 170, 300 );

對話框的最后一步在哪需要鑒別它們自己是 OnD3D10FrameRender 函數(shù). 一個對話框如果你不繪制它并且用戶看不到不太好吧?

    //
    // Render the UI
    //
    g_HUD.OnRender( fElapsedTime ); 
    g_SampleUI.OnRender( fElapsedTime );

 

資源管理程序初始化

資源管理程序在每次回調(diào)初始化和銷毀時需要被初始化. 這是因?yàn)樵诿看卧O(shè)備被重建的時候 GUI需被重建, 或者交換鏈被重建的時候.  CDXUTDialogResourceManager 類包含符合每個這樣的回調(diào)的函數(shù), 具有一模一樣的名字. 因此, 它僅僅是在合適的地方插入代碼來調(diào)用它們.

    V_RETURN( g_DialogResourceManager.OnD3D10CreateDevice( pd3dDevice ) );
    V_RETURN( g_DialogResourceManager.OnD3D10ResizedSwapChain( pd3dDevice, pBackBufferSurfaceDesc ) );
    g_DialogResourceManager.OnD3D10ReleasingSwapChain();
    g_DialogResourceManager.OnD3D10DestroyDevice();



響應(yīng)GUI事件

當(dāng)全部初始化完成后, 我們最后可以開始寫代碼來處理GUI交互了. 在我們初始化對話框的時候,我們設(shè)置這些對話框的回調(diào)函數(shù)做為OnGUIEvent. 現(xiàn)在我們將要創(chuàng)建 OnGUIEvent 函數(shù), 它會監(jiān)聽并處理GUI 相關(guān)事件(被框架調(diào)用的).

這是一個簡單的對每個IDC標(biāo)識符包含一個case代碼塊的函數(shù),它在對話框創(chuàng)建時被監(jiān)聽. 在每個case塊中會是處理代碼,假設(shè)用戶以某種方式控制.這里的處理控制的代碼跟 Win32 代碼很像.

跟HUD 相關(guān)的控制實(shí)際上調(diào)用DXUT內(nèi)置的函數(shù). 有一個DXUT 函數(shù)關(guān)系到切換全屏, 綁定引用軟件渲染器, 并且更改設(shè)備設(shè)置(它會調(diào)用下面提到的3D設(shè)置對話框).

SampleUI 對話框包含自定義的代碼操作跟滑塊相關(guān)聯(lián)的變量. 它會收集數(shù)值, 更新與它相關(guān)的文本, 并把數(shù)值傳遞給滑塊.

    void CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext )
    {
        
        switch( nControlID )
        {
            case IDC_TOGGLEFULLSCREEN: DXUTToggleFullScreen(); break;
            case IDC_TOGGLEREF:        DXUTToggleREF(); break;
            case IDC_CHANGEDEVICE:     g_D3DSettingsDlg.SetActive( !g_D3DSettingsDlg.IsActive() ); break;
    
            case IDC_TOGGLESPIN:
            {
                g_bSpinning = g_SampleUI.GetCheckBox( IDC_TOGGLESPIN )->GetChecked();
                break;
            }
    
            case IDC_PUFF_SCALE: 
            {
                g_fModelPuffiness = (float) (g_SampleUI.GetSlider( IDC_PUFF_SCALE )->Getvalue() * 0.01f);
    
                WCHAR sz[100];
                StringCchPrintf( sz, 100, L"Puffiness: %0.2f", g_fModelPuffiness ); 
                g_SampleUI.GetStatic( IDC_PUFF_STATIC )->SetText( sz );
    
                g_pPuffiness->SetFloat( g_fModelPuffiness );
                break;
            }
        }        
    }

 


更新消息處理

既然現(xiàn)在我們有對話框消息和用戶交互, 那就會有傳遞給應(yīng)用程序的消息需要被解析, 如果適用的話.那些代碼會在DXUT提供的 MsgProc 回調(diào)函數(shù)中被處理. 在之前的指南里, 這段是空白因?yàn)闆]有消息需要被處理. 但是現(xiàn)在,我們要確保發(fā)送給資源管理程序和對話框的消息被適當(dāng)?shù)匕l(fā)送.
不需要專門的消息處理代碼; 我們只需要對每個對話框調(diào)用MsgProcs來確保消息被處理了.這通過調(diào)用每個單獨(dú)的類的相應(yīng)的 MsgProc 函數(shù)來完成. 應(yīng)該注意到這個函數(shù)提供了一個標(biāo)記通報給框架,不需要更多的處理, 因此,可以退出.

    LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext )
    {
        // Always allow dialog resource manager calls to handle global messages
        // so GUI state is updated correctly
        *pbNoFurtherProcessing = g_DialogResourceManager.MsgProc( hWnd, uMsg, wParam, lParam );
        if( *pbNoFurtherProcessing )
            return 0;
    
        if( g_D3DSettingsDlg.IsActive() )
        {
            g_D3DSettingsDlg.MsgProc( hWnd, uMsg, wParam, lParam );
            return 0;
        }
    
        // Give the dialogs a chance to handle the message first
        *pbNoFurtherProcessing = g_HUD.MsgProc( hWnd, uMsg, wParam, lParam );
        if( *pbNoFurtherProcessing )
            return 0;

        *pbNoFurtherProcessing = g_SampleUI.MsgProc( hWnd, uMsg, wParam, lParam );
        if( *pbNoFurtherProcessing )
            return 0;
    
        if( uMsg == WM_CHAR && wParam == '1' )
            DXUTToggleFullScreen();
    
        return 0;
    }

 


3D設(shè)置對話框

有一個專門的內(nèi)置對話框用來控制D3DDevice的設(shè)置. DXUT提供的這個對話框就是CD3DSettingsDlg. 它的功能像一個自定義對話框,但是它會提供給用戶所有的他們需要修改的設(shè)置選項(xiàng).

    CD3DSettingsDlg         g_D3DSettingsDlg;       // Device settings dialog

初始化就像其它對話框一樣, 你可以調(diào)用初始化函數(shù). 然而, 每次Direct3D 改變它的交換鏈或者設(shè)備,這個對話框必須被更新.因此, 它必須包含一個調(diào)用在OnD3D10CreateDevice 和OnD3D10ResizedSwapChain里, 相對應(yīng)地命名, 來反映這些改變. 同樣地,銷毀對象的改變必須被通報, 因而, 需要在 OnD3D10DestroyDevice里調(diào)用.

    g_D3DSettingsDlg.Init( &g_DialogResourceManager );
    
    V_RETURN( g_D3DSettingsDlg.OnD3D10CreateDevice( pd3dDevice ) );
    V_RETURN( g_D3DSettingsDlg.OnD3D10ResizedSwapChain( pd3dDevice, pBackBufferSurfaceDesc ) );
    
    g_D3DSettingsDlg.OnD3D10DestroyDevice();

在渲染的這一邊, 因?yàn)閷υ捒虻某霈F(xiàn)可以被改變,它通過一個叫 IsActive()的標(biāo)記來轉(zhuǎn)換. 如果這個標(biāo)記被設(shè)成false, 那么這個面板將不會被渲染.這個面板的改變是受上面說過的HUD對話框處理的. 標(biāo)記The IDC_CHANGEDEVICE與HUD 控件相關(guān), 就像上面提到的那樣.

    if( g_D3DSettingsDlg.IsActive() )
    {
        g_D3DSettingsDlg.MsgProc( hWnd, uMsg, wParam, lParam );
        return 0;
    }

一旦這些初始步驟都完成了, 你就可以在你的程序中加入這個對話框. 試著編譯這個指南并與更改設(shè)置的面板進(jìn)行交互來觀察它的效果. 真正的D3DDevice 或交換鏈的重構(gòu)在DXUT內(nèi)部完成.
 


文本渲染

一個程序不會有趣如果用戶不知道干什么. 所以就DXUT包含了一個工具類用于在屏幕上繪制2D 文本用來給用戶反饋. 這個類CDXUTD3D10TextHelper允許你在屏幕的任意位置繪制一行行的文本, 并有簡單的字符串輸入. 開始之前, 我們要實(shí)例化這個類.  既然文本渲染與大多數(shù)初始化過程獨(dú)立, 在這個指南里我們讓大部分代碼在RenderText10里.

    CDXUTD3D10TextHelper txtHelper( g_pFont, g_pSprite, 15 );

 

初始化

我們傳入的第一個參數(shù)是我們要繪制的字體. 字體的類型是D3DX提供的ID3DXFont. 要初始化這個字體, 你調(diào)用 D3DX10CreateFont, 并且你要傳入設(shè)備, 高度, 寬度, 重量, mip層次 (一般取 1), 斜體, 字符集, 精度, 質(zhì)量,  傾斜度和家族, 字體名稱, 還有你的對象的指針. 雖然它看起來像很多字符, 只有開始的4個和最后的2個真正有意義.

    V_RETURN( D3DX10CreateFont( pd3dDevice, 15, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET, 
                                OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, 
                                L"Arial", &g_pFont ) );

第2個參數(shù)需要我們初始化一個ID3DXSprite 類. 要做這個的話, 我們可以調(diào)用 D3DX10CreateSprite (notice the trend here?). 這個函數(shù)只需要設(shè)備和對象的指針做為參數(shù).

    // Initialize the sprite
    V_RETURN( D3DX10CreateSprite( pd3dDevice, &g_pSprite ) );

當(dāng)然, 像其它對象一樣, 字體和精靈在我們完成時必須被銷毀. 這可以用常見的 SAFE_RELEASE 宏完成.

    SAFE_RELEASE( g_pFont );
    SAFE_RELEASE( g_pSprite );

 

渲染

在這個示例里包含的文本里有渲染的統(tǒng)計(jì)信息. 另外, 還有一個區(qū)域顯示怎樣用鼠標(biāo)操作模型.

渲染必須在OnD3D10FrameRender里調(diào)用, 而且在這個指南里, 它是在幀渲染調(diào)用里調(diào)用RenderText10來完成的.
第一個區(qū)域一直在繪制, 因此, 它最先完成. 第一個文本渲染調(diào)用是Begin(). 它通知引擎我要開始輸出文本到屏幕. 在那之后, 我們設(shè)置好“指針”的位置, 文本的顏色, 我們就準(zhǔn)備繪制了.

輸出一個字符串文本要調(diào)用DrawTextLine來完成. 你傳入字符串, 它就會在當(dāng)前位置輸出. 它在文本書寫的同時增加指針, 因此, 如果q包含了一個\n, 它會自動移動指針到下一行.

    // Output statistics
    txtHelper.Begin();
    txtHelper.SetInsertionPos( 2, 0 );
    txtHelper.SetForegroundColor( D3DXCOLOR( 1.0f, 1.0f, 0.0f, 1.0f ) );
    txtHelper.DrawTextLine( DXUTGetFrameStats() );
    txtHelper.DrawTextLine( DXUTGetDeviceStats() );


還有另一個方法來輸出文本, 就好似通常使用的printf. 你用特殊的字符來格式化字符串, 然后插入變量到字符串里. 這通過DrawFormattedTextLine來實(shí)現(xiàn).

    txtHelper.SetForegroundColor( D3DXCOLOR( 1.0f, 1.0f, 1.0f, 1.0f ) );
    txtHelper.DrawFormattedTextLine( L"fTime: %0.1f  sin(fTime): %0.4f", fTime, sin(fTime) );

既然幫助繪制用一種相似的方式, 所以不需要涵蓋那部分代碼了. 一定要注意你能在任何時候通過調(diào)用SetInsertionPos來重新設(shè)置指針的位置.
最后, 當(dāng)你對文本輸出滿意后, 調(diào)用 End() 來通知引擎你完成了.


posted on 2008-05-18 17:31 lovedday 閱讀(2397) 評論(2)  編輯 收藏 引用 所屬分類: ■ DXUT Research

評論

# re: 【ZT】DXUT中控件、文本繪制、攝像機(jī)的使用 2012-06-18 11:37 張憶

您好!請問怎么在這些封裝的框架里加入自己的鍵盤響應(yīng)代碼 比如本來是用鼠標(biāo)旋轉(zhuǎn)模型的,我怎么改成用鍵盤來控制?  回復(fù)  更多評論   

# re: 【ZT】DXUT中控件、文本繪制、攝像機(jī)的使用[未登錄] 2012-11-21 19:29 1

@張憶
DXUTSetCallbackKeyboard  回復(fù)  更多評論   

公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            精品91视频| 久久精品国产v日韩v亚洲| 亚洲国产欧美日韩| 曰本成人黄色| 亚洲国产一区二区三区a毛片| 国产精品日本一区二区| 欧美成人午夜免费视在线看片| 久久综合九色| 亚洲欧美日韩久久精品| 亚洲欧美激情四射在线日| 午夜亚洲一区| 久久夜色精品国产| 亚洲高清不卡在线| 欧美岛国在线观看| 日韩视频免费在线| 亚洲主播在线播放| 久久久综合网站| 欧美人在线观看| 国产一区导航| 在线视频免费在线观看一区二区| 午夜欧美大片免费观看| 欧美11—12娇小xxxx| 一区二区日韩免费看| 久久综合五月| 国产欧美日韩不卡免费| 91久久久一线二线三线品牌| 亚洲一区欧美激情| 欧美大色视频| 欧美一区二区三区在线看| 欧美电影免费观看高清| 国产日韩欧美视频在线| 一区二区欧美国产| 欧美成人免费视频| 午夜国产欧美理论在线播放| 欧美激情精品久久久久久黑人| 国产欧美一区二区在线观看| 亚洲欧洲三级| 久久久久久久久久码影片| 日韩亚洲一区在线播放| 久久只精品国产| 欧美专区在线播放| 欧美日本国产在线| 亚洲第一福利社区| 久久精品中文字幕一区二区三区| 亚洲欧洲一区二区天堂久久| 久久精品人人做人人爽| 国产精品入口福利| 亚洲线精品一区二区三区八戒| 欧美成人一二三| 性久久久久久久久久久久| 国产精品久久久久婷婷| 99re6热在线精品视频播放速度| 久久精品主播| 性做久久久久久免费观看欧美| 欧美午夜欧美| 99国产精品99久久久久久| 亚洲高清久久久| 欧美高清在线播放| 99视频日韩| 亚洲人成在线观看一区二区| 久久综合九色99| 91久久久精品| 亚洲精品资源| 国产精品久久777777毛茸茸| 在线亚洲精品| 一区二区三区久久| 99热这里只有精品8| 亚洲级视频在线观看免费1级| 久久久视频精品| 亚洲第一福利社区| 欧美国产高清| 欧美高清视频在线播放| 亚洲人成亚洲人成在线观看图片| 欧美国产视频在线| 欧美国产激情二区三区| 亚洲免费播放| 亚洲精品在线免费| 亚洲最新在线视频| 亚洲国产精品久久人人爱蜜臀| 免费欧美电影| 欧美日韩国产限制| 亚洲欧美伊人| 久久亚洲综合色一区二区三区| 亚洲美女少妇无套啪啪呻吟| 在线一区二区三区四区五区| 国产欧美综合在线| 亚洲福利视频专区| 国产精品久久影院| 久久成人免费日本黄色| 麻豆精品在线视频| 亚洲欧美日韩国产另类专区| 欧美一区二区在线免费观看 | 欧美国产日韩a欧美在线观看| 欧美成年人视频网站| 亚洲欧美日韩国产成人精品影院| 久久久免费精品视频| 亚洲图中文字幕| 久久久久久久一区二区| 国产精品99久久久久久久女警| 午夜天堂精品久久久久| 亚洲精品国产精品乱码不99| 亚洲欧美成人一区二区在线电影 | 欧美第十八页| 久久精品亚洲精品国产欧美kt∨| 欧美激情影音先锋| 久久久久久亚洲精品中文字幕| 欧美久久视频| 欧美a级理论片| 国产精品蜜臀在线观看| 亚洲成人在线网| 国产视频丨精品|在线观看| 欧美人与禽猛交乱配视频| 欧美精品国产一区| 麻豆精品在线视频| 国产精品自拍小视频| 亚洲精品孕妇| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产精品xvideos88| 樱桃视频在线观看一区| 亚洲美女一区| 亚洲电影第1页| 欧美亚洲一区在线| 香蕉久久夜色精品国产| 欧美韩日一区二区| 免费中文日韩| 一区二区三区在线视频观看| 亚洲女人小视频在线观看| 在线亚洲美日韩| 欧美日本亚洲| 亚洲精品日韩精品| 99国产精品久久久久久久成人热| 老妇喷水一区二区三区| 牛牛影视久久网| 亚洲激情视频网站| 欧美va亚洲va国产综合| 欧美国产亚洲视频| 亚洲精品影院在线观看| 免费成人av在线看| 亚洲成色www久久网站| 在线免费高清一区二区三区| 久久精品视频在线看| 美女精品在线| 亚洲国产mv| 欧美区二区三区| aaa亚洲精品一二三区| 亚洲视频电影在线| 久久精品五月| 久久久久五月天| 在线播放亚洲一区| 免费亚洲一区| 一本久道久久综合婷婷鲸鱼| 亚洲午夜一区二区三区| 欧美午夜欧美| 性做久久久久久免费观看欧美| 久久一区二区三区国产精品| 亚洲国产综合视频在线观看| 欧美激情视频网站| 亚洲午夜视频在线观看| 久久久www| 亚洲精品资源| 国产精品一区二区三区观看| 欧美在线地址| 亚洲精品久久久久久一区二区| 亚洲天堂黄色| 黑丝一区二区| 欧美精品一区二区高清在线观看| 亚洲午夜久久久久久久久电影院| 久久久久久久尹人综合网亚洲| 亚洲大胆女人| 欧美日韩日本视频| 久久国产精品黑丝| 日韩视频欧美视频| 久久综合狠狠综合久久综青草| 亚洲麻豆视频| 国产亚洲综合性久久久影院| 欧美高潮视频| 午夜免费日韩视频| 亚洲日本视频| 久久伊人亚洲| 亚洲女女女同性video| 亚洲高清av在线| 国产欧美日韩综合一区在线观看 | 日韩一级裸体免费视频| 久久成人综合视频| 一区二区欧美在线| 久久久久久伊人| 亚洲激情在线观看| 欧美日韩精品免费| 欧美成人在线免费视频| 亚洲午夜一区二区三区| 亚洲国产精品一区在线观看不卡 | 国产欧美一区二区精品性色| 欧美不卡在线视频| 久久精品视频在线看| 亚洲一区二区毛片| 亚洲另类在线一区| 亚洲福利国产精品| 老司机精品视频一区二区三区| 亚洲欧美日韩中文播放| 日韩午夜免费视频|