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

永遠(yuǎn)也不完美的程序

不斷學(xué)習(xí),不斷實(shí)踐,不斷的重構(gòu)……

常用鏈接

統(tǒng)計(jì)

積分與排名

好友鏈接

最新評(píng)論

HLSL初級(jí)教程(1)

作者:trcj

目錄

前言

1.HLSL入門

       1.1什么是著色器

       1.2什么是HLSL

       1.3怎么寫HLSL著色器

       1.4怎么用HLSL著色器

2.頂點(diǎn)著色器

       2.1可編程數(shù)據(jù)流模型

       2.2頂點(diǎn)聲明

       2.3用頂點(diǎn)著色器實(shí)現(xiàn)漸變動(dòng)畫

3.像素著色器

       3.1多紋理化

       3.2多紋理效果的像素著色器

       3.3應(yīng)用程序

4.HLSL Effect(效果框架)

       4.1Effect代碼結(jié)構(gòu)

       4.2Effect實(shí)現(xiàn)多紋理化效果

結(jié)語

參考資料

前言

       本教程針對(duì)HLSLHigh Level Shading Language初學(xué)者,從應(yīng)用的角度對(duì)HLSL、頂點(diǎn)著色器、像素著色器和Effect效果框架進(jìn)行了介紹,教程中去掉了對(duì)HLSL語法等一些細(xì)節(jié)內(nèi)容的討論,力求幫助讀者盡可能快地理解HLSL編程的概念,掌握HLSL編程的方法。

       教程中部分闡述直接引用了其他文檔,這是因?yàn)檫@些文檔表述之精要,已經(jīng)達(dá)到了不能更改的地步,這里表示感謝。

       本文檔版權(quán)為作者所有,非商業(yè)用途可免費(fèi)使用,轉(zhuǎn)載請(qǐng)注明出處。

      

    作者也是HLSL的初學(xué)者,教程中難免紕漏之處,望大家指正。有任何意見請(qǐng)發(fā)信到taoboxiang2006@yahoo.com.cn或者留言到 http://blog.csdn.net/trcj1/進(jìn)行討論。


1.HLSL入門

1.1什么是著色器

DirectX使用管道技術(shù)(pipeline)進(jìn)行圖形渲染,其構(gòu)架如下:

1.1 Direct3D Graphics Pipeline

之前我們使用管道的步驟如下:

1.       設(shè)定頂點(diǎn)、圖元、紋理等數(shù)據(jù)信息;

2.       設(shè)定管道狀態(tài)信息;

²        渲染狀態(tài)

通過SetRenderState方法設(shè)定渲染狀態(tài);

另外,使用以下方法設(shè)置變換、材質(zhì)和光照:

              SetTransform

              SetMaterial

SetLight

              LightEnable

²        取樣器狀態(tài)

通過SetSamplerState方法設(shè)定取樣器狀態(tài);

²        紋理層狀態(tài)

通過SetTextureStageState設(shè)定紋理層狀態(tài);

3.       渲染;

這部分交由D3D管道按照之前的設(shè)定自行完成,這部分操作是D3D預(yù)先固定的,所以這種管道技術(shù)被稱為固定功能管道(fixed function pipeline)

 

固定功能管道給我們編程提供了一定的靈活性,但是仍有很多效果難以通過這種方式實(shí)現(xiàn),比如:

1.       在渲染過程中,我們要求y坐標(biāo)值大于10的頂點(diǎn)要被繪制到坐標(biāo)值(000)的地方,在之前的固定功能管道中,頂點(diǎn)被繪制的位置是在第1步即被設(shè)定好的,不可能在渲染過程中進(jìn)行改變,所以是不可行的;

2.       謀頂點(diǎn)在紋理貼圖1上映射為點(diǎn)A,在紋理貼圖2上映射為點(diǎn)B,我們要求該頂點(diǎn)顏色由AB共同決定,即:

定點(diǎn)顏色 = A點(diǎn)色彩值*0.7 + B點(diǎn)色彩值*0.3

   這在固定管道編程中也是不可行的。

以上兩個(gè)問題都可以由可編程管道(pragrammable pipeline)來解決。

       可編程管線允許用戶自定義一段可以在GPU上執(zhí)行的程序,代替固定管道技術(shù)中的Vertex ProcessingPixel Processing階段(參照?qǐng)D1.1),從而在使我們?cè)诰幊讨羞_(dá)到更大的靈活性。其中替換Vertex Processing的部分叫做Vertex Shader(頂點(diǎn)著色器),替換Pixel Proccessing的部分叫做Pixel Shader(像素著色器),這就是我們所說的著色器Shader


1.2什么是HLSL

Direct8.x中,著色器是通過低級(jí)著色匯編語言來編寫的,這樣的程序更像是匯編式的指令集合,由于其效率低、可讀性差、版本限制等缺點(diǎn),迫切要求出現(xiàn)一門更高級(jí)的著色語言。到了Direct3D9HLSLHigh Level Shading Language,高級(jí)渲染語言)應(yīng)運(yùn)而生了。

HLSL的語法非常類似于CC++,學(xué)習(xí)起來是很方便的。


1.3怎么寫HLSL著色器

我們可以直接把HLSL著色器代碼作為一長(zhǎng)串字符串編寫進(jìn)我們的應(yīng)用程序源文件中,但是,更加方便和模塊化的方法是把著色器的代碼從應(yīng)用程序代碼中分離出來。因此,我們將著色器代碼單獨(dú)保存為文本格式,然后在應(yīng)用程序中使用特定函數(shù)將其加載進(jìn)來。

下面是一個(gè)完整的HLSL著色器程序代碼,我們把它保存在BasicHLSL.txt中。該著色器完成頂點(diǎn)的世界變換、觀察變換和投影變幻,并將頂點(diǎn)顏色設(shè)定為指定的顏色。

//

// BasicHLSL.txt

//

 

//

// Global variable

//

 

matrix WVPMatrix;

vector color;

 

//

// Structures

//

 

struct VS_INPUT

{

       vector position : POSITION;

};

 

struct VS_OUTPUT

{

       vector position : POSITION;

       vector color : COLOR;

};

 

//

// Functions

//

 

VS_OUTPUT SetColor(VS_INPUT input)

{

       VS_OUTPUT output = (VS_OUTPUT)0;

      

       output.position = mul(input.position, WVPMatrix);     

       output.color = color;

      

       return output;

}

 

下面就針對(duì)上述代碼講解一下HLSL著色器程序的編寫:

1.3.1全局變量

       代碼中聲明了兩個(gè)全局變量:

matrix WVPMatrix;

vector color;

       變量WVPMatrix是一個(gè)矩陣類型,它包含了世界、觀察、投影的合矩陣,用于對(duì)頂點(diǎn)進(jìn)行坐標(biāo)變換;

       變量color是一個(gè)向量類型,它用于設(shè)定頂點(diǎn)顏色;

       代碼中并沒有對(duì)全局變量進(jìn)行初始化,這是因?yàn)槲覀儗?duì)全局變量的初始化過程將在應(yīng)用程序中進(jìn)行,全局變量在應(yīng)用程序中賦值而在著色器程序中使用,這是應(yīng)用程序和著色器通信的關(guān)鍵所在。具體賦值過程將在后續(xù)部分講述。

1.3.2輸入輸出

²        輸入輸出結(jié)構(gòu)

程序中定義了兩個(gè)輸入輸出結(jié)構(gòu)VS_INPUTVS_OUTPUT

struct VS_INPUT

{

       vector position : POSITION;

};

 

struct VS_OUTPUT

{

       vector position : POSITION;

       vector color : COLOR;

};

自定義的結(jié)構(gòu)可以采用任意名稱,結(jié)構(gòu)不過是一種組織數(shù)據(jù)的方式,并不是強(qiáng)制的,你也可以不使用,而將本程序的輸入改為:

       vector position : POSITION;

²        標(biāo)志符

用于輸入輸出的變量采用用一種特殊的聲明方式:

Type VariableName : Semantic

       這個(gè)特殊的冒號(hào)語法表示一個(gè)語義,冒號(hào)后面的標(biāo)志符用來指定變量的用途,如

vector position : POSITION;

       其中,POSITION標(biāo)志符表明該變量表示頂點(diǎn)位置,另外還有諸如COLORNORMAL等很多表示其他意義的標(biāo)志符。

本節(jié)所說的輸入輸出其實(shí)是指著色器代碼和編譯器、GPU之間的通信,和應(yīng)用程序是無關(guān)的,所以這些變量不需要在應(yīng)用程序中進(jìn)行賦值,標(biāo)志符告訴編譯器各個(gè)輸入輸出變量的用途(頂點(diǎn)位置、法線、顏色等),這是著色器代碼和編譯器、GPU之間通信的關(guān)鍵。

1.3.3入口函數(shù)

       程序中還定義了一個(gè)函數(shù)SetColor

OUTPUT SetColor(INPUT input)

{

       VS_OUTPUT output = (VS_OUTPUT)0;

      

       output.position = mul(input.position, WVPMatrix);     

       output.color = color;

      

       return output;

}

1.       該函數(shù)以inputoutput類型作為輸入輸出;

2.       使全局變量WVPMatrixinput.position相乘,以完成頂點(diǎn)的世界、觀察、投影變換,并把結(jié)果賦值到output.position

output.position = mul(input.position, WVPMatrix);

3.       將全局變量color的值賦給output.color

output.color = color;

4.       在同一個(gè)著色器代碼文件中,可以有多個(gè)用戶自定義函數(shù),因此在應(yīng)用程序中需要指定一個(gè)入口函數(shù),相當(dāng)于windows程序的WinMain函數(shù),本程序只包含SetColor一個(gè)函數(shù)而且它將被做為入口函數(shù)使用。

 

1.3.4總結(jié)

       至此,一個(gè)HLSL著色器編寫完畢,渲染過程中,當(dāng)一個(gè)頂點(diǎn)被送到著色器時(shí):

1.       全局變量WVPMatrixcolor將在應(yīng)用程序中被賦值;

2.       入口函數(shù)SetColor被調(diào)用編譯器根據(jù)標(biāo)志符將頂點(diǎn)信息填充到VS_INPUT中的各個(gè)字段;

3.       SetColor函數(shù)中,首先定義一個(gè)VS_OUTPUT信息,之后根據(jù)WVPMatrixcolor變量完成頂點(diǎn)的坐標(biāo)變換和顏色設(shè)定操作,最后函數(shù)返回VS_OUTPUT結(jié)構(gòu);

4.       編譯器將會(huì)再次根據(jù)標(biāo)志符把返回的VS_OUTPUT結(jié)構(gòu)中的各字段映射為頂點(diǎn)相應(yīng)的信息。

5.       頂點(diǎn)被送往下一個(gè)流程接受進(jìn)一步處理。

上述過程中,全局變量在應(yīng)用程序中賦值而在著色器程序中使用,這是應(yīng)用程序和著色器通信的關(guān)鍵所在;標(biāo)志符告訴編譯器各個(gè)輸入輸出變量的用途(頂點(diǎn)位置、法線、顏色等),這是著色器代碼和編譯器、GPU之間通信的關(guān)鍵。個(gè)人認(rèn)為這是著色器中最為精義的地方:)


1.4怎么用HLSL著色器

應(yīng)用程序中對(duì)HLSL著色器的使用分為以下步驟:

1.       加載(稱為編譯更為妥當(dāng))著色器代碼;

2.       創(chuàng)建(頂點(diǎn)/像素)著色器;

3.       對(duì)著色器中的變量進(jìn)行賦值,完成應(yīng)用程序和著色器之間的通信。

4.       把著色器設(shè)定到渲染管道中;

本例使用的著色器是一個(gè)頂點(diǎn)著色器,因此我們將通過頂點(diǎn)著色器的使用來講解著色器的使用過程,像素著色器的使用過程與此大同小異,二者之間僅有些微差別。

 

1.4.1聲明全局變量

IDirect3DVertexShader9* BasicShader = 0; //頂點(diǎn)著色器指針

 

ID3DXConstantTable* BasicConstTable = 0; //常量表指針

D3DXHANDLE WVPMatrixHandle          = 0;

D3DXHANDLE ColorHandle              = 0;

 

ID3DXMesh* Teapot                   = 0; //指向程序中D3D茶壺模型的指針

 

1.4.2編譯著色器

通過D3DXCompileShaderFromFile函數(shù)從應(yīng)用程序外部的文本文件BasicHLSL.txt中編譯一個(gè)著色器:

//編譯后的著色器代碼將被放在一個(gè)buffer中,可以通過ID3DXBuffer接口對(duì)其進(jìn)行訪問,之后的著色器將從這里創(chuàng)建

       ID3DXBuffer* shaderBuffer      = 0;

       //用于接受錯(cuò)誤信息

       ID3DXBuffer* errorBuffer       = 0;

 

       //編譯著色器代碼

       D3DXCompileShaderFromFile("BasicHLSL.txt", //著色器代碼文件名

                                                  0,

                                                  0,

                                                  "SetColor", //入口函數(shù)名稱

                                                  "vs_1_1", //頂點(diǎn)著色器版本號(hào)

                                                  D3DXSHADER_DEBUG,// Debug模式編譯      

                                                  &shaderBuffer, //指向編譯后的著色器代碼的指針

                                                  &errorBuffer,

                                                  &BasicConstTable); //常量表指針

1.4.3創(chuàng)建著色器

       應(yīng)用程序通過CreateVertexShader創(chuàng)建一個(gè)頂點(diǎn)著色器,注意使用了上一步得到的shaderBuffer

       g_pd3dDevice->CreateVertexShader((DWORD*)shaderBuffer->GetBufferPointer(), &BasicShader);

1.4.3對(duì)著色器中的變量進(jìn)行賦值

1.3.4節(jié)說到著色器的全局變量在應(yīng)用程序中賦值而在著色器程序中使用,這是應(yīng)用程序和著色器通信的關(guān)鍵所在,這里就具體說明賦值過程。

著色器中的全局變量在編譯后都被放在一個(gè)叫常量表的結(jié)構(gòu)中,我們可以使用ID3DXConstantTable接口對(duì)其進(jìn)行訪問,參照1.4.1中編譯著色器函數(shù)D3DXCompileShaderFromFile的最后一個(gè)參數(shù),該參數(shù)即返回了指向常量表的指針。

對(duì)一個(gè)著色器中變量進(jìn)行賦值的步驟如下:

1.       通過變量名稱得到指向著色器變量的句柄;

還記得在BasicHLSL.x著色器文件中我們聲明的兩個(gè)全局變量嗎:

        matrix WVPMatrix;

vector color;

              我們?cè)趹?yīng)用程序中相應(yīng)的聲明兩個(gè)句柄:

D3DXHANDLE WVPMatrixHandle          = 0;

D3DXHANDLE ColorHandle              = 0;

              然后通過變量名得到分別得到對(duì)應(yīng)的兩個(gè)句柄:

                     WVPMatrixHandle = BasicConstTable->GetConstantByName(0, "WVPMatrix");

                     ColorHandle = BasicConstTable->GetConstantByName(0, "color");

2.       通過句柄對(duì)著色器變量進(jìn)行賦值;

我們可以先設(shè)置各變量為默認(rèn)值:

        BasicConstTable->SetDefaults(g_pd3dDevice);

之后,可以使用ID3DXConstantTable::SetXXX函數(shù)對(duì)各個(gè)變量進(jìn)行賦值:

HRESULT SetXXX(

 LPDIRECT3DDEVICE9 pDevice,

 D3DXHANDLE hConstant,

 XXX value

);

其中XXX代表變量類型,例如Matrix類型的變量就要使用SetMatrix函數(shù)賦值,而Vector類型的則要使用SetVector來賦值。

1.4.4把著色器設(shè)定到渲染管道中

       這里我們使用SetVertexShader方法把頂點(diǎn)著色器設(shè)定到渲染管道中:

              g_pd3dDevice->SetVertexShader(BasicShader);

1.4.5整個(gè)渲染過程如下

在渲染過程中,我們?cè)O(shè)定頂點(diǎn)的變換坐標(biāo)和顏色值,渲染代碼如下:

    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,

D3DCOLOR_XRGB(153,153,153), 1.0f, 0 );

    //開始渲染

    g_pd3dDevice->BeginScene();

 

    //得到世界矩陣、觀察矩陣和投影矩陣

    D3DXMATRIX matWorld, matView, matProj;

    g_pd3dDevice->GetTransform(D3DTS_WORLD, &matWorld);

    g_pd3dDevice->GetTransform(D3DTS_VIEW, &matView);

    g_pd3dDevice->GetTransform(D3DTS_PROJECTION, &matProj);

 

    D3DXMATRIX matWVP = matWorld * matView * matProj;

    //通過句柄對(duì)著色器中的WVPMatrix變量進(jìn)行賦值

    BasicConstTable->SetMatrix(g_pd3dDevice, WVPMatrixHandle, &matWVP);

   

    D3DXVECTOR4 color(1.0f, 1.0f, 0.0f, 1.0f);

    //通過句柄對(duì)著色器中的color變量進(jìn)行賦值,這里我們賦值為黃色

    BasicConstTable->SetVector(g_pd3dDevice, ColorHandle, &color);

 

    //把頂點(diǎn)著色器設(shè)定到渲染管道中

    g_pd3dDevice->SetVertexShader(BasicShader);

 

    //繪制模型子集

    Teapot->DrawSubset(0);

 

    //渲染完畢

    g_pd3dDevice->EndScene();

    g_pd3dDevice->Present(NULL, NULL, NULL, NULL);

 

       編譯運(yùn)行程序,運(yùn)行效果如圖1.2所示,這里我們將頂點(diǎn)顏色設(shè)置為黃色,如果讀者在渲染過程中不斷變換對(duì)著色器變量color的賦值,你將會(huì)得到一個(gè)色彩不斷變幻的D3D茶壺。

D3DXVECTOR4 color(1.0f, 1.0f, 0.0f, 1.0f); //讀者可以嘗試改變顏色值

BasicConstTable->SetVector(g_pd3dDevice, ColorHandle, &color);

1.2 著色器效果


posted on 2008-08-04 12:28 狂爛球 閱讀(8565) 評(píng)論(1)  編輯 收藏 引用

評(píng)論

# re: HLSL初級(jí)教程(1) 2010-07-14 10:05 楊漱玉青

Thanks~教程很棒~  回復(fù)  更多評(píng)論   


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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            18成人免费观看视频| 亚洲欧美激情诱惑| 一区二区三区免费看| 欧美色精品在线视频| 亚洲综合不卡| 久久久久一区二区三区| 精品999日本| 欧美大片一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆 | 极品日韩av| 免费视频一区| 99成人精品| 久久全球大尺度高清视频| 亚洲国产日韩精品| 欧美手机在线视频| 欧美一区二区三区免费观看视频| 老司机午夜精品视频在线观看| 亚洲精品日韩在线观看| 国产精品成人久久久久| 久久精品视频99| 亚洲精品在线一区二区| 久久精品成人一区二区三区| 亚洲第一免费播放区| 欧美视频成人| 久久免费的精品国产v∧| 亚洲精品影视在线观看| 久久成人综合视频| 亚洲精品美女在线观看| 国产欧美一区二区三区视频| 蜜臀91精品一区二区三区| 一二三四社区欧美黄| 久久尤物视频| 亚洲香蕉在线观看| 精品福利电影| 国产精品入口尤物| 欧美激情一区二区三级高清视频| 亚洲欧美成人| 99精品久久| 欧美成人在线网站| 久久se精品一区精品二区| 亚洲美女在线一区| 在线观看一区欧美| 国产精品一区二区你懂得| 欧美激情一区在线观看| 欧美呦呦网站| 亚洲女ⅴideoshd黑人| 亚洲高清资源| 久久―日本道色综合久久| 国产精品99久久久久久久女警| 亚洲第一主播视频| 国产一本一道久久香蕉| 国产精品乱子久久久久| 欧美日韩一区二区精品| 蜜桃av久久久亚洲精品| 欧美中在线观看| 亚洲在线观看| 一区二区三区视频观看| 91久久中文| 亚洲国产精品久久久久婷婷884 | 久久久国产精品亚洲一区| 亚洲天堂第二页| 99国产精品| 亚洲精品午夜| 亚洲精品久久久久久久久久久久| 黑人一区二区| 激情亚洲一区二区三区四区| 国产精品久久久久一区二区| 欧美亚日韩国产aⅴ精品中极品| 欧美精品色网| 女同性一区二区三区人了人一| 久久国产精品一区二区| 欧美夜福利tv在线| 午夜日韩电影| 午夜精品一区二区三区在线视| 亚洲综合99| 欧美一级片在线播放| 欧美亚洲三区| 性感少妇一区| 久久不射电影网| 久久国内精品自在自线400部| 欧美诱惑福利视频| 久久久久久9| 久久一区中文字幕| 欧美福利电影在线观看| 欧美黑人在线播放| 欧美日韩亚洲一区三区| 国产精品高清在线| 国产日韩精品一区二区浪潮av| 国产农村妇女精品一区二区| 国产日产欧美a一级在线| 国产性做久久久久久| 国内精品久久久久久| 尤物在线精品| 亚洲精品欧美日韩专区| 制服丝袜亚洲播放| 午夜视频一区在线观看| 久久久久久久久久久久久9999 | 久久成年人视频| 久久九九免费视频| 欧美黄免费看| 国产精品久久久久久久9999| 国产精品亚洲片夜色在线| 国产亚洲精品一区二555| 亚洲电影在线看| 亚洲精品一区二区在线观看| 宅男噜噜噜66国产日韩在线观看| 午夜视频精品| 免费在线国产精品| aa成人免费视频| 午夜国产欧美理论在线播放 | 91久久精品美女| 亚洲影视中文字幕| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲激情二区| 校园激情久久| 欧美精品一区二区三区视频 | 国产亚洲欧美一级| 亚洲激情在线观看视频免费| 亚洲免费影视第一页| 另类专区欧美制服同性| 99视频超级精品| 久久久夜精品| 国产精品视频内| 亚洲国产一二三| 欧美一区二区视频在线观看| 久久久午夜视频| 一区二区三区蜜桃网| 久久午夜电影网| 国产精品欧美日韩| 亚洲欧洲精品一区二区| 久久久久高清| 夜夜嗨一区二区| 欧美91大片| 国模大胆一区二区三区| 亚洲少妇在线| 欧美福利电影在线观看| 性久久久久久久久久久久| 欧美日韩高清在线观看| 在线观看成人网| 欧美与欧洲交xxxx免费观看| 亚洲乱码国产乱码精品精可以看 | 免费在线观看精品| 国产一区二区三区在线观看免费视频| 一个人看的www久久| 女主播福利一区| 新狼窝色av性久久久久久| 欧美色区777第一页| 日韩一级在线观看| 亚洲高清二区| 免费中文字幕日韩欧美| 影音先锋亚洲一区| 久久久免费精品视频| 亚洲欧美日韩综合| 国产精品久久久久久妇女6080 | 久久久精品久久久久| 国产精品色婷婷| 亚洲欧美网站| 亚洲桃花岛网站| 国产精品高潮久久| 亚洲一级片在线看| 99视频精品免费观看| 欧美日韩中文在线| 在线亚洲欧美专区二区| 亚洲日本va午夜在线影院| 欧美黑人在线播放| 99xxxx成人网| 99精品99| 国产精品久久久久99| 羞羞答答国产精品www一本| 亚洲午夜一区二区三区| 国产精品美女主播| 性欧美xxxx大乳国产app| 亚洲综合好骚| 国产日韩欧美综合精品| 久久精品一本| 久久九九久精品国产免费直播 | 91久久精品一区二区三区| 欧美国产精品日韩| 欧美风情在线观看| 在线中文字幕不卡| 亚洲一级二级| 国产一区 二区 三区一级| 久久夜色撩人精品| 欧美国产日本在线| 亚洲一区二区在线视频| 羞羞漫画18久久大片| 好看的av在线不卡观看| 欧美1级日本1级| 欧美区在线观看| 欧美亚洲三区| 久久久久久久久久码影片| 亚洲裸体在线观看| 一区二区三区四区国产| 国产一区视频在线观看免费| 蜜桃av一区| 欧美日韩国产在线播放| 欧美一级电影久久| 男人的天堂亚洲在线| 亚洲一区日韩| 久久先锋影音|