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

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

像素著色器入門(2)

新建網(wǎng)頁 1

18.4 HLSL采樣器對象

在像素著色器中使用HLSL的內(nèi)建函數(shù)tex*XXXX給紋理采樣。注意:采樣時(shí)引用紋理上圖素的坐標(biāo)索引和采樣器狀態(tài)來生成像素。

通常這些函數(shù)需要我們做2件事:

使用紋理中的索引建立(u, v)紋理坐標(biāo)。

給特定的紋理中編入索引。

將紋理坐標(biāo)(u, v)輸入到像素著色器,在一個(gè)指定的HLSL對象中的像素著色器中,我們想編入索引的紋理是在像素著色器中被定義過的,在HLSL中叫作采樣器。(The particular texture that we want to index into is identified in the pixel shader by a special HLSL object called a sampler.),我們可以把采樣器對象想象成定義紋理和采樣器階段的對象。例如:假如我們使用3張紋理,這意味著我們需要在像素著色器里能夠引用3個(gè)階段中的每個(gè)一個(gè)。在像素著色器中我們這樣寫:

                
        

        sampler FirstTex;

        

        sampler SecondTex;

        

        sampler ThirdTex;

Direct3D將給每個(gè)采樣器對象連接一個(gè)唯一的紋理級別(stage),在應(yīng)用程序中我們找出與采樣器對象相關(guān)聯(lián)的階段,并設(shè)置相應(yīng)的紋理和采樣器狀態(tài)給該階段。下列代碼將舉例說明如何在應(yīng)用程序中設(shè)置紋理并把采樣器狀態(tài)設(shè)置為FirstTex

       
    

        //         創(chuàng)建

        IDirect3DTexture9* Tex;

        D3DXCreateTextureFromFile(Device, "tex.bmp", &Tex);

        

        … …

        

        //         取得常量FirstTex的句柄

        FirstTexHandle = MultiTexCT->GetConstantByName(0, "FirstTex");

                

        //         取得常量的描述

        D3DXCONSTANT_DESC FirstTexDesc;

        

        UINT         count;

        MultiTexCT->GetConstantDesc(FirstTexHandle, &FirstTexDesc, &count);

        

         … …

        

        //         FirstTex設(shè)置紋理和采樣器狀態(tài).        

        

        // We identify the stage FirstTex is associated with from the           D3DXCONSTANT_DESC::RegisterIndex member:

        

        Device->SetTexture(FirstTexDesc.RegisterIndex, Tex);

        

        Device->SetSamplerState(FirstTexDesc.RegisterIndex,  D3DSAMP_MAGFILTER,      D3DTEXF_LINEAR);

        

        Device->SetSamplerState(FirstTexDesc.RegisterIndex,  D3DSAMP_MINFILTER,       D3DTEXF_LINEAR);

        

        Device->SetSamplerState(FirstTexDesc.RegisterIndex,  D3DSAMP_MIPFILTER,       D3DTEXF_LINEAR);

注意:作為選擇,替換使用采樣器類型,你可以使用更多特殊的、強(qiáng)大的類型,如:sampler1Dsampler2Dsampler3D,和samplerCube類型,這些類型更安全并且它們只使用tex*函數(shù)。例如:一個(gè)sampler2D對象只使用tex2D*函數(shù),同樣一個(gè)sampler3D對象只使用tex3D*函數(shù)。

 

 

18.5例子程序:Multitexturing in a Pixel Shader

這章中的例子演示了在像素著色器中使用多紋理,這個(gè)例子渲染的目標(biāo)是一個(gè)木箱紋理,一個(gè)聚光燈紋理,和一個(gè)包含字符串的紋理。這就是例子程序:Pixel Shader

 

這個(gè)例子可以不使用像素著色器來實(shí)現(xiàn),但實(shí)現(xiàn)這個(gè)程序是簡單直接,它允許我們示范如何編寫,創(chuàng)建,而且使用像素著色器實(shí)現(xiàn)一些特效不必使用那些復(fù)雜的算法。

雖然在這個(gè)例子中一次只使用3張紋理,檢查采樣器對象的成員以確定每個(gè)像素著色器能夠使用的版本,這是值得的。換句話說,我們一次能使用多少紋理,這依賴于使用的像素著色器的版本:

像素著色器的版本ps_1_1 ps_1_3支持4個(gè)紋理采樣器。

像素著色器的版本ps_1_4支持6個(gè)紋理采樣器。

像素著色器的版本ps_2_0 ps_3_0支持16個(gè)紋理采樣器。

 

     /******************************************************************************
      Pixel shader that does multi texturing.
     ******************************************************************************/

    
    sampler g_base_texture;
    sampler g_spotlight_texture;
    sampler g_string_texture;
    
    
struct sPixelInput
    {
        float2 
base         : TEXCOORD0;
        float2 spotlight : TEXCOORD1;
        float2 text         : TEXCOORD2;
    };
    
    
struct sPixelOutput
    {
        vector diffuse : COLOR0;
    };
    
    
    /////////////////////////////////////////////////////////////////////////////////
    

    sPixelOutput main(sPixelInput input)
    {
        sPixelOutput output = (sPixelOutput) 0;
    
        
// sample appropriate textures
    
        vector base_color       = tex2D(g_base_texture,        input.base);
        vector spotlight_color = tex2D(g_spotlight_texture, input.spotlight);
        vector text_color       = tex2D(g_string_texture,    input.text);
    
        
// combine texel colors
    
        vector color = base_color * spotlight_color + text_color;
    
        
// increase the intensity of the pixel slightly
    
    color += 0.1f;
    
        
// save the resulting pixel color
    
    output.diffuse = color;
    
        
return output;
    }

tex2D的函數(shù)使用說明如下:

There are two overloaded tex2D texture lookup functions:

  • 2D texture lookup
  •     
  • 2D texture lookup with partial derivatives     

2D texture lookup

This function performs a 2D texture lookup.

Syntax

                 
ret tex2D(s, t)

Where:

                                                                                                                                                                                                                      
NameIn/OutTemplate TypeComponent TypeSize
sinobjectsampler2D1
tinvectorfloat2
retoutvectorfloat4

2D texture lookup with partial derivatives

This function performs a 2D texture lookup also, but also uses the partial derivatives to help pick the LOD.

Syntax

                 
ret tex2D(s, t, ddx, ddy)

Where:

                                                                                                                                                                                                                                                                                                                                    
NameIn/OutTemplate TypeComponent TypeSize
sinobjectsampler2D1
tinvectorfloat2
ddxinvectorfloat2
ddyinvectorfloat2
retoutvectorfloat4

 

首先像素著色器定義了3個(gè)sampler對象,要渲染的每個(gè)紋理,接下來定義是inputoutput結(jié)構(gòu)。注意:我們沒有將任何的顏色值輸入到像素著色器中,這是因?yàn)槲覀兪褂眉y理自己的顏色和光照;即BaseTex保存表面的顏色,SpotLightTex是光照圖。像素著色器輸出只一個(gè)簡顏色值,指定了我們計(jì)算過的這個(gè)特定像素的顏色。

Main函數(shù)使用tex2D函數(shù)采樣3個(gè)紋理,即它取得每個(gè)紋理的圖素,計(jì)算映射到的像素,這通常依賴于指定的紋理坐標(biāo)和采樣器對象。然后我們混合圖素的顏色用公式:c = b * s + t。接下來我們讓全部的像素變亮一個(gè)bit,給每個(gè)部分增加0.1f。最后我們保存結(jié)果像素顏色并返回它。

執(zhí)行程序:

     /**************************************************************************************************
      Deomstrates multi-texturing using a pixel shader.  You will have to switch to the REF 
      device to run this sample if your hardware doesn't support pixel shaders.
     **************************************************************************************************/

    
    #include "d3dUtility.h"
    
    #pragma warning(disable : 4100)
    
    
struct sMultiTextureVertex
    {
        sMultiTextureVertex(
float x, float y, float z,
                            
float u0, float v0,
                            
float u1, float v1,
                            
float u2, float v2)
        {
            _x =  x;  _y =  y; _z = z;
            _u0 = u0; _v0 = v0; 
            _u1 = u1; _v1 = v1;
            _u2 = u2, _v2 = v2;
        }
    
        
float _x, _y, _z;
        
float _u0, _v0;
        
float _u1, _v1;
        
float _u2, _v2;
    };
    
    
const DWORD MULTI_TEXTURE_VERTEX_FVF = D3DFVF_XYZ | D3DFVF_TEX3; 
    
    
    /////////////////////////////////////////////////////////////////////////////////////////////
    

    
const int WIDTH  = 640;
    
const int HEIGHT = 480;
    
    IDirect3DDevice9*        g_device;
    IDirect3DPixelShader9*    g_pixel_shader;
    ID3DXConstantTable*        g_constant_table;
    IDirect3DVertexBuffer9*    g_vertex_buffer;
    
    IDirect3DTexture9*        g_base_texture;
    IDirect3DTexture9*        g_spotlight_texture;
    IDirect3DTexture9*        g_string_texture;
    
    D3DXHANDLE                g_base_texture_handle;
    D3DXHANDLE                g_spotlight_texture_handle;
    D3DXHANDLE                g_string_texture_handle;
    
    D3DXCONSTANT_DESC        g_base_texture_desc;
    D3DXCONSTANT_DESC        g_spotlight_texture_desc;
    D3DXCONSTANT_DESC        g_string_texture_desc;
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    

    
bool setup()
    {    
        
// create geometry
    

        g_device->CreateVertexBuffer(6 * 
sizeof(sMultiTextureVertex), D3DUSAGE_WRITEONLY,
            MULTI_TEXTURE_VERTEX_FVF, D3DPOOL_MANAGED, &g_vertex_buffer, NULL);
    
        sMultiTextureVertex* v;
    
        g_vertex_buffer->Lock(0, 0, (
void**)&v, 0);
    
        v[0] = sMultiTextureVertex(-10.0f, -10.0f, 5.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
        v[1] = sMultiTextureVertex(-10.0f,  10.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        v[2] = sMultiTextureVertex( 10.0f,  10.0f, 5.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);
    
        v[3] = sMultiTextureVertex(-10.0f, -10.0f, 5.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
        v[4] = sMultiTextureVertex( 10.0f,  10.0f, 5.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);
        v[5] = sMultiTextureVertex( 10.0f, -10.0f, 5.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
    
        g_vertex_buffer->Unlock();
    
        
// compile shader
    

        ID3DXBuffer*    shader_buffer;
        ID3DXBuffer*    error_buffer;
    
        HRESULT hr = D3DXCompileShaderFromFile("MultiTextureShader.cxx", NULL, NULL, "main", "ps_2_0", D3DXSHADER_DEBUG,
                                               &shader_buffer, &error_buffer, &g_constant_table);
    
        
// output any error messages
    
    if(error_buffer)
        {
            MessageBox(NULL, (
char*) error_buffer->GetBufferPointer(), "ERROR", MB_OK);
            safe_release<ID3DXBuffer*>(error_buffer);
        }
    
        
if(FAILED(hr))
        {
            MessageBox(NULL, "D3DXCompileShaderFromFile() - FAILED", "ERROR", MB_OK);
            
return false;
        }
    
        hr = g_device->CreatePixelShader((DWORD*) shader_buffer->GetBufferPointer(), &g_pixel_shader);
    
        
if(FAILED(hr))
        {
            MessageBox(NULL, "CreatePixelShader - FAILED", "ERROR", MB_OK);
            
return false;
        }
    
        safe_release<ID3DXBuffer*>(shader_buffer);
    
        
// load textures
    
        D3DXCreateTextureFromFile(g_device, "crate.bmp",     &g_base_texture);
        D3DXCreateTextureFromFile(g_device, "spotlight.bmp", &g_spotlight_texture);
        D3DXCreateTextureFromFile(g_device, "text.bmp",         &g_string_texture);
    
        
// get handles
    
        g_base_texture_handle        = g_constant_table->GetConstantByName(NULL, "g_base_texture");
        g_spotlight_texture_handle    = g_constant_table->GetConstantByName(NULL, "g_spotlight_texture");
        g_string_texture_handle        = g_constant_table->GetConstantByName(NULL, "g_string_texture");
    
        
// set constant descriptions
    

        UINT count;
    
        g_constant_table->GetConstantDesc(g_base_texture_handle,      &g_base_texture_desc,         &count);
        g_constant_table->GetConstantDesc(g_spotlight_texture_handle, &g_spotlight_texture_desc, &count);
        g_constant_table->GetConstantDesc(g_string_texture_handle,      &g_string_texture_desc,     &count);    
    
        g_constant_table->SetDefaults(g_device);
    
        
// set the projection matrix
    
    D3DXMATRIX proj;
        D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI/4.0f, (
float)WIDTH/HEIGHT, 1.0f, 1000.0f);
        g_device->SetTransform(D3DTS_PROJECTION, &proj);
        
        
//g_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
    
    
        
return true;
    }
    
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    

    
void cleanup()
    {    
        safe_release<IDirect3DVertexBuffer9*>(g_vertex_buffer);
    
        safe_release<IDirect3DTexture9*>(g_base_texture);
        safe_release<IDirect3DTexture9*>(g_spotlight_texture);
        safe_release<IDirect3DTexture9*>(g_string_texture);
        
        safe_release<IDirect3DPixelShader9*>(g_pixel_shader);
        safe_release<ID3DXConstantTable*>(g_constant_table);
    }
    
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    

    
bool display(float time_delta)
    {    
        
// update the scene: allow user to rotate around scene.
    

        
static float angle  = (3.0f * D3DX_PI) / 2.0f;
        
static float radius = 20.0f;
    
        
if(GetAsyncKeyState(VK_LEFT) & 0x8000f)
            angle -= 0.5f * time_delta;
    
        
if(GetAsyncKeyState(VK_RIGHT) & 0x8000f)
            angle += 0.5f * time_delta;
    
        
if(GetAsyncKeyState(VK_UP) & 0x8000f)
            radius -= 2.0f * time_delta;
    
        
if(GetAsyncKeyState(VK_DOWN) & 0x8000f)
            radius += 2.0f * time_delta;
    
        D3DXVECTOR3 position(cosf(angle) * radius, 0.0f, sinf(angle) * radius);
        D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
        D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
    
        D3DXMATRIX view_matrix;
        D3DXMatrixLookAtLH(&view_matrix, &position, &target, &up);
        g_device->SetTransform(D3DTS_VIEW, &view_matrix);
            
        
// render now
    

        g_device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xFFFFFFFF, 1.0f, 0);
    
        g_device->BeginScene();
    
        g_device->SetPixelShader(g_pixel_shader);
    
        g_device->SetFVF(MULTI_TEXTURE_VERTEX_FVF);
        g_device->SetStreamSource(0, g_vertex_buffer, 0, 
sizeof(sMultiTextureVertex));
    
        
// base texture
    
        g_device->SetTexture(g_base_texture_desc.RegisterIndex, g_base_texture);
        g_device->SetSamplerState(g_base_texture_desc.RegisterIndex, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        g_device->SetSamplerState(g_base_texture_desc.RegisterIndex, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        g_device->SetSamplerState(g_base_texture_desc.RegisterIndex, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
    
        
// spotlight texture
    
        g_device->SetTexture(g_spotlight_texture_desc.RegisterIndex, g_spotlight_texture);
        g_device->SetSamplerState(g_spotlight_texture_desc.RegisterIndex, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        g_device->SetSamplerState(g_spotlight_texture_desc.RegisterIndex, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        g_device->SetSamplerState(g_spotlight_texture_desc.RegisterIndex, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
    
        
// string texture
    
        g_device->SetTexture(g_string_texture_desc.RegisterIndex, g_string_texture);
        g_device->SetSamplerState(g_string_texture_desc.RegisterIndex, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        g_device->SetSamplerState(g_string_texture_desc.RegisterIndex, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        g_device->SetSamplerState(g_string_texture_desc.RegisterIndex, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
    
        g_device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
        
        g_device->EndScene();
    
        g_device->Present(NULL, NULL, NULL, NULL);
    
        
return true;
    }
    
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    

    LRESULT CALLBACK wnd_proc(HWND hwnd, UINT msg, WPARAM word_param, LPARAM long_param)
    {
        
switch(msg)
        {
        
case WM_DESTROY:
            PostQuitMessage(0);
            
break;
    
        
case WM_KEYDOWN:
            
if(word_param == VK_ESCAPE)
                DestroyWindow(hwnd);
    
            
break;
        }
    
        
return DefWindowProc(hwnd, msg, word_param, long_param);
    }
    
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    

    
int WINAPI WinMain(HINSTANCE inst, HINSTANCE, PSTR cmd_line, int cmd_show)
    {
        
if(! init_d3d(inst, WIDTH, HEIGHT, true, D3DDEVTYPE_HAL, &g_device))
        {
            MessageBox(NULL, "init_d3d() - failed.", 0, MB_OK);
            
return 0;
        }
    
        
if(! setup())
        {
            MessageBox(NULL, "Steup() - failed.", 0, MB_OK);
            
return 0;
        }
    
        enter_msg_loop(display);
    
        cleanup();
        g_device->Release();
    
        
return 0;
    }

setup函數(shù)執(zhí)行下列功能:

填充方形的頂點(diǎn)緩存

編譯著像素色器

創(chuàng)建像素色器

讀取紋理

設(shè)置投影矩陣,不使用光照

取得采樣器(sampler)對象的句柄

取得采樣器對象的描述


display函數(shù)設(shè)置像素著色器,使用2個(gè)紋理,并且在渲染方格前設(shè)置他們對應(yīng)的采樣器狀態(tài)。


運(yùn)行截圖:

 

下載源程序


posted on 2008-04-11 13:07 lovedday 閱讀(2780) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導(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久久久久久再现| 狠色狠色综合久久| 欧美精品福利在线| 午夜精品一区二区三区电影天堂| 久久亚洲美女| 一区二区三区国产精品| 国产目拍亚洲精品99久久精品| 欧美在线视频二区| 亚洲激情电影在线| 香蕉av777xxx色综合一区| 国产一区二区三区在线观看网站| 欧美a级理论片| 亚洲香蕉视频| 欧美电影免费观看网站| 亚洲在线一区| 1000部精品久久久久久久久| 欧美三级韩国三级日本三斤| 久久亚洲风情| 性欧美精品高清| 亚洲精品免费电影| 免费看亚洲片| 欧美一区二区免费视频| 亚洲精品欧美一区二区三区| 国产日韩亚洲欧美综合| 欧美日韩国产二区| 久久精品在线观看| 亚洲午夜伦理| 亚洲精品一区二区三区av| 久久九九免费视频| 亚洲欧美精品suv| 亚洲欧洲三级| 亚洲第一区色| 国内精品伊人久久久久av影院| 欧美人与性动交cc0o| 鲁大师成人一区二区三区| 亚洲免费视频一区二区| 亚洲毛片一区二区| 亚洲福利视频一区二区| 久久在线免费观看| 久久激情视频久久| 亚洲欧美日韩一区二区三区在线观看| 亚洲日本中文| 亚洲黄色免费电影| 在线精品一区| 伊人久久成人| 国产在线精品一区二区中文| 国产精品va在线播放| 欧美三区视频| 欧美色播在线播放| 欧美日韩一区二区在线播放| 欧美激情一区二区三区在线视频观看 | 亚洲黄一区二区三区| 激情成人综合网| 国产一区二区三区四区老人| 国产午夜精品久久| 国产视频一区三区| 国产婷婷色综合av蜜臀av | 国一区二区在线观看| 国产欧美亚洲视频| 国产精品性做久久久久久| 国产精品视频免费观看www| 国产精品豆花视频| 国产精品草莓在线免费观看| 欧美日韩一区二区三区四区在线观看| 欧美日韩国语| 国产精品高潮粉嫩av| 国产精品成人一区二区| 国产精品扒开腿做爽爽爽视频 | 国产精品国产三级国产专播品爱网 | 中文av一区二区| 亚洲深夜福利网站| 亚洲一区尤物| 欧美一区午夜精品| 久久久久久久尹人综合网亚洲| 久久久久国色av免费观看性色| 久久久av网站| 免费不卡在线视频| 欧美日韩成人在线| 国产精品国产精品| 国产日韩一区欧美| 亚洲第一精品久久忘忧草社区| 亚洲国产日本| 亚洲夜间福利| 久久九九全国免费精品观看| 米奇777超碰欧美日韩亚洲| 欧美黄色网络| 亚洲视频欧洲视频| 久久国产手机看片| 欧美成人网在线| 国产精品久久二区| 黄色成人精品网站| 99精品国产热久久91蜜凸| 亚洲欧美日韩系列| 久久久www成人免费毛片麻豆| 欧美成人三级在线| 一区二区三区久久| 久久精品一区二区三区不卡牛牛| 欧美激情精品久久久久久黑人| 国产精品福利片| 一区在线影院| 亚洲一区欧美激情| 你懂的国产精品永久在线| 洋洋av久久久久久久一区| 欧美诱惑福利视频| 欧美日韩精品在线视频| 狠狠狠色丁香婷婷综合激情| 亚洲免费观看| 久久亚洲精品中文字幕冲田杏梨| 亚洲精品久久久一区二区三区| 亚洲尤物在线视频观看| 欧美国产日韩精品| 国产综合婷婷| 亚洲欧美日韩精品久久亚洲区| 欧美国产第二页| 欧美一区二区三区电影在线观看| 欧美久久久久久久| 亚洲成人在线免费| 久久激情婷婷| 亚洲私人影院在线观看| 欧美顶级大胆免费视频| 国产一区二区三区四区hd| 亚洲视频在线一区观看| 欧美激情一区二区久久久| 欧美一级成年大片在线观看| 欧美视频在线免费看| 亚洲激情婷婷| 久久一二三四| 欧美亚洲免费在线| 国产精品国产三级国产普通话99| 亚洲人久久久| 欧美mv日韩mv国产网站| 欧美一区二区三区婷婷月色 | 久久久综合网| 国产日韩精品在线播放| 亚洲欧美成人精品| 亚洲精品少妇30p| 免费看成人av| 亚洲国产日韩欧美在线图片| 久久久五月天| 午夜久久久久久| 国产精品日日摸夜夜添夜夜av| 在线综合欧美| 亚洲麻豆av| 欧美日韩影院| 亚洲系列中文字幕| 日韩视频在线观看一区二区| 欧美另类在线播放| 一区二区久久久久| 亚洲精品在线免费观看视频| 欧美激情免费观看| 一区二区不卡在线视频 午夜欧美不卡在 | 国产婷婷一区二区| 久久精品伊人| 久久疯狂做爰流白浆xx| 国内精品99| 牛牛精品成人免费视频| 巨乳诱惑日韩免费av| 亚洲电影中文字幕| 亚洲高清久久久| 欧美精品国产精品| 正在播放欧美视频| 亚洲视频网在线直播| 国产精品美女久久久久久久| 欧美一级片一区| 久久精品观看| 亚洲黄页一区| 99这里有精品| 国产毛片精品国产一区二区三区| 久久av免费一区| 久久久久久久国产| 日韩视频一区二区三区在线播放| 亚洲三级色网| 国产精品综合| 鲁大师影院一区二区三区| 免费在线观看一区二区| 亚洲网站啪啪| 欧美在线|欧美| 亚洲欧洲在线观看| 国产精品99久久久久久久女警| 国产亚洲精品高潮| 亚洲二区精品| 国产精品视频一二| 欧美国产日韩一区二区| 欧美日韩在线免费| 久久成人资源| 欧美电影在线播放| 亚洲欧美在线磁力| 麻豆精品一区二区av白丝在线| 一区二区毛片| 久久久视频精品| 亚洲影院在线观看|