日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

DirectX11 With Windows SDK--12 深度/模板状态、平面镜反射绘制

發布時間:2025/3/15 windows 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DirectX11 With Windows SDK--12 深度/模板状态、平面镜反射绘制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

深度/模板測試使用的是與后備緩沖區同等分辨率大小的緩沖區,每個元素的一部分連續位用于深度測試,其余的則用作模板測試。兩個測試的目的都是為了能夠根據深度/模板狀態需求的設置來選擇需要繪制的像素。

DirectX11 With Windows SDK完整目錄

Github項目源碼

歡迎加入QQ群: 727623616 可以一起探討DX11,以及有什么問題也可以在這里匯報。

深度/模板測試

深度測試、模板測試的執行是在混合操作之前執行的,具體的執行順序為:模板測試→深度測試→混合操作。

深度測試

深度測試需要用到深度/模板緩沖區,對每個像素使用24位或32位來映射物體從世界到NDC坐標系下z的值(即深度,范圍[0.0, 1.0])。0.0時達到攝像機的最近可視距離,而1.0時達到攝像機的最遠可視距離。若某一像素位置接收到多個像素片元,只有z值最小的像素才會通過最終的深度測試。具體細化的話,就是現在有一個像素片元,已知它的深度值,然后需要跟深度緩沖區中的深度值進行比較,若小于深度緩沖區的深度值,則該像素片元將會覆蓋后備緩沖區原來的像素片元,并更新深度緩沖區中對應位置的深度值。

模板測試

除了深度測試以為,我們還可以設定模板測試來阻擋某些特定的區域的像素通過后備緩沖區。而且模板測試在操作上自由度會比深度測試大。對于需要進行模板測試的像素,比較式如下:
(StencilRef & StencilReadMask) ? (Value & StencilReadMask)

該表達式首先括號部分是兩個操作數進行與運算,然后通過?(用戶指定的運算符)對兩個結果進行比較。若該表達式的值為真,則最終通過模板測試,并保留該像素進行后續的混合操作。

其中StencilReadMask則是應用程序所提供的掩碼值。

深度/模板格式

深度/模板緩沖區是一個2D數組(紋理),它必須經由確定的數據格式創建:

  • DXGI_FORMAT_D32_FLOAT_S8X24_UINT:每個元素占64位,其中32位浮點數用于深度測試,8位無符號整數用于模板測試,剩余24位僅用于填充。
  • DXGI_FORMAT_D24_UNORM_S8_UINT:每個元素占32位,其中24位無符號整數映射到深度值[0.0, 1.0]的區間,8位無符號整數用于模板測試。
  • ID3D11DeviceContext::ClearDepthStencilView方法–深度/模板緩沖區內容清空

    方法原型如下:

    void ID3D11DeviceContext::ClearDepthStencilView(ID3D11DepthStencilView *pDepthStencilView, // [In]深度模板視圖UINT ClearFlags, // [In]使用D3D11_CLEAR_FLAG枚舉類型決定需要清空的部分FLOAT Depth, // [In]使用Depth值填充所有元素的深度部分UINT8 Stencil); // [In]使用Stencil值填充所有元素的模板部分

    其中D3D11_CLEAR_FLAG有如下枚舉值:

    枚舉值含義
    D3D11_CLEAR_DEPTH清空深度部分
    D3D11_CLEAR_STENCIL清空模板部分

    可以使用位運算或來同時清理。

    通常深度值會默認設為1.0以確保任何在攝像機視野范圍內的物體都能被顯示出來

    模板值則默認會設置為0

    ID3D11Device::CreateDepthStencilState方法–創建深度/模板狀態

    要創建深度/模板狀態ID3D11DepthStencilState之前,首先需要填充D3D11_DEPTH_STENCIL_DESC結構體:

    typedef struct D3D11_DEPTH_STENCIL_DESC {BOOL DepthEnable; // 是否開啟深度測試D3D11_DEPTH_WRITE_MASK DepthWriteMask; // 深度值寫入掩碼D3D11_COMPARISON_FUNC DepthFunc; // 深度比較函數BOOL StencilEnable; // 是否開啟模板測試UINT8 StencilReadMask; // 模板值讀取掩碼UINT8 StencilWriteMask; // 模板值寫入掩碼D3D11_DEPTH_STENCILOP_DESC FrontFace; // 對正面朝向的三角形進行深度/模板操作描述D3D11_DEPTH_STENCILOP_DESC BackFace; // 對背面朝向的三角形進行深度/模板操作的描述 } D3D11_DEPTH_STENCIL_DESC;

    深度狀態設定

  • DepthEnable:如果關閉了深度測試,則繪制的先后順序就十分重要了。對于不透明的物體,必須按照從后到前的順序進行繪制,否則最后繪制的內容會覆蓋之前的內容,看起來就像在最前面那樣。并且關閉深度測試會導致深度緩沖區的值會保持原樣,不再進行更新,此時DepthWriteMask也不會使用。
  • D3D11_DEPTH_WRITE_MASK枚舉類型只有兩種枚舉值:
  • 枚舉值含義
    D3D11_DEPTH_WRITE_MASK_ZERO不寫入深度/模板緩沖區
    D3D11_DEPTH_WRITE_MASK_ALL允許寫入深度/模板緩沖區

    但即便設置了D3D11_DEPTH_WRITE_MASK_ZERO,如果DepthEnable開著的話仍會取原來的深度值進行深度比較,只是不會更新深度緩沖區。

  • DepthFunc:指定D3D11_COMPARISON_FUNC枚舉值來描述深度測試的比較操作,標準情況下是使用D3D11_COMPARISON_LESS來進行深度測試,當然你也可以自定義測試的比較方式。
  • 枚舉類型D3D11_COMPARISON_FUNC的枚舉值如下:

    枚舉值含義
    D3D11_COMPARISON_NEVER = 1該比較函數一定返回false
    D3D11_COMPARISON_LESS = 2使用<來替換?
    D3D11_COMPARISON_EQUAL = 3使用==來替換?
    D3D11_COMPARISON_LESS_EQUAL = 4使用<=來替換?
    D3D11_COMPARISON_GREATER = 5使用>來替換?
    D3D11_COMPARISON_NOT_EQUAL = 6使用!=來替換?
    D3D11_COMPARISON_GREATER_EQUAL = 7使用>=來替換?
    D3D11_COMPARISON_ALWAYS = 8該比較函數一定返回true

    默認情況下,深度狀態的值如下:

    DepthEnable = TRUE; DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL DepthFunc = D3D11_COMPARISION_LESS

    模板狀態設定

  • StencilEnable:若要使用模板測試,則指定為true
  • StencilReadMask:該掩碼用于指定StencilRef和深度/模板緩沖區的模板值Value中的某些特定位,默認使用的是下面宏常量:
    #define D3D11_DEFAULT_STENCIL_READ_MASK (0xff)
  • StencilWriteMask:該掩碼指定待寫入的模板值的哪些位要寫入深度/模板緩沖區中,默認使用的是下面宏常量:
    #define D3D11_DEFAULT_STENCIL_WRITE_MASK (0xff)
  • FrontFace:該結構體指定了不同測試結果下對模板值應做什么樣的更新(對于正面朝向的三角形)
  • BackFace:該結構體指定了不同測試結果下對模板值應做什么樣的更新(對于背面朝向的三角形)
  • 深度/模板操作描述結構體如下:

    typedefstruct D3D11_DEPTH_STENCILOP_DESC {D3D11_STENCIL_OP StencilFailOp; D3D11_STENCIL_OP StencilDepthFailOp; D3D11_STENCIL_OP StencilPassOp; D3D11_COMPARISON_FUNC StencilFunc; } D3D11_DEPTH_STENCILOP_DESC;
  • StencilFailOp:若模板測試不通過對深度/模板緩沖區的模板值部分的操作
  • StencilDepthFailOp:若模板測試通過,但深度測試不通過對深度/模板緩沖區的模板值部分的操作
  • StencilPassOp:若模板/深度測試通過對深度/模板緩沖區的模板值部分的操作
  • StencilFunc:模板測試所用的比較函數
  • 枚舉類型D3D11_STENCIL_OP的枚舉值如下:

    枚舉值含義
    D3D11_STENCIL_OP_KEEP保持目標模板值不變
    D3D11_STENCIL_OP_ZERO保持目標模板值為0
    D3D11_STENCIL_OP_REPLACE使用StencilRef的值替換模板模板值
    D3D11_STENCIL_OP_INCR_SAT對目標模板值加1,超過255的話將值保持在255
    D3D11_STENCIL_OP_DECR_SAT對目標模板值減1,低于0的話將保持在0
    D3D11_STENCIL_OP_INVERT對目標模板值的每個位進行翻轉
    D3D11_STENCIL_OP_INCR對目標模板值加1,超過255的話值將上溢變成0
    D3D11_STENCIL_OP_DECR對目標模板值減1,低于0的話將下溢變成255

    默認情況下,模板狀態的值如下:

    StencilEnable = FALSE; StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK; StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP; FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS; BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP; BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;

    填充完上面一堆結構體信息后,就終于可以創建深度模板狀態了:

    HRESULT ID3D11Device::CreateDepthStencilState(const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc, // [In]深度/模板狀態描述ID3D11DepthStencilState **ppDepthStencilState // [Out]輸出深度/模板狀態 );

    ID3D11DeviceContext::OMSetDepthStencilState方法–輸出合并階段設置深度/模板狀態

    創建好深度/模板狀態后,我們就可以將它綁定到渲染管線上:

    void ID3D11DeviceContext::OMSetDepthStencilState(ID3D11DepthStencilState *pDepthStencilState, // [In]深度/模板狀態,使用nullptr的話則是默認深度/模板狀態UINT StencilRef); // [In]提供的模板值

    如果要恢復到默認狀況,可以這樣調用:

    md3dImmediateContext->OMSetDepthStencilState(nullptr, 0);

    利用模板測試繪制平面鏡

    要實現鏡面反射的效果,我們需要解決兩個問題:

  • 如何計算出一個物體的所有頂點在任意平面的鏡面的反射位置
  • 在鏡面位置只顯示鏡面本身和反射的物體的混合
  • 若一個有平面鏡的場景中包含透明和非透明物體,則實際的繪制順序為:

  • 只向鏡面區域的模板緩沖區寫入值1,而深度緩沖區和后備緩沖區的值都不應該寫入
  • 將需要繪制的鏡面反射物體進行反射變換,然后僅在模板值為1的區域先繪制不透明的反射物體到后備緩沖區
  • 在模板值為1的區域繪制透明的反射物體后,再繪制透明鏡面到后備緩沖區
  • 繪制正常的非透明物體到后備緩沖區
  • 繪制透明物體到后備緩沖區
  • 在3D場景中,要繪制鏡面反射的物體,我們只需要將原本的物體(所有頂點位置)進行鏡面反射矩陣的變換即可得到。但是反射的物體僅可以在物體一側透過鏡面看到,在鏡面的另一邊是無法看到反射的物體的。通過模板測試,我們可以在攝像機僅與鏡面同側的時候標定鏡面區域,并繪制鏡面反射的物體。

    我們可以使用XMMatrixReflection函數來創建反射矩陣,提供的參數為平面向量\((\mathbf{n} ,d)\)

    這里簡單了解一下,平面可以表示為點法式:
    \[\mathbf{n} \cdot \mathbf{p} + d = 0\]
    n為平面法向量,p為平面一點,進行叉乘運算。

    d是一個有向距離值

    上面的式子展開后就是我們高數見到的平面方程:
    \[Ax + By + Cz + D = 0\]

    這相當于我

    例如(0.0f, 0.0f, -1.0f, 10.0f)可以表示z = 10的平面

    HLSL代碼的變化

    在Basic.hlsli中,添加了一個常量緩沖區用來控制反射開關,它的更新頻率僅次于每次繪制更新的緩沖區。并且由于鏡面是固定的,這里將鏡面反射矩陣放在不會變化的常量緩沖區上:

    cbuffer CBChangesEveryDrawing : register(b0) {matrix g_World;matrix g_WorldInvTranspose;Material g_Material; }cbuffer CBDrawingStates : register(b1) {int g_IsReflection;float3 g_Pad1; }cbuffer CBChangesEveryFrame : register(b2) {matrix g_View;float3 g_EyePosW; }cbuffer CBChangesOnResize : register(b3) {matrix g_Proj; }cbuffer CBChangesRarely : register(b4) {matrix g_Reflection;DirectionalLight g_DirLight[10];PointLight g_PointLight[10];SpotLight g_SpotLight[10];int g_NumDirLight;int g_NumPointLight;int g_NumSpotLight;float g_Pad2; }

    所以現在目前已經使用了5個常量緩沖區,可以說在管理上會非常復雜,其中頂點著色器需要用到所有的常量緩沖區,而像素著色器需要用到除了CBChangesOnResize外的所有常量緩沖區。

    然后3D頂點著色器添加了是否需要乘上反射矩陣的判定:

    // Basic_VS_3D.hlsl #include "Basic.hlsli"// 頂點著色器(3D) VertexPosHWNormalTex VS_3D(VertexPosNormalTex vIn) {VertexPosHWNormalTex vOut;matrix viewProj = mul(g_View, g_Proj);float4 posW = mul(float4(vIn.PosL, 1.0f), g_World);float3 normalW = mul(vIn.NormalL, (float3x3) g_WorldInvTranspose);// 若當前在繪制反射物體,先進行反射操作[flatten]if (g_IsReflection){posW = mul(posW, g_Reflection);normalW = mul(normalW, (float3x3) g_Reflection);}vOut.PosH = mul(posW, viewProj);vOut.PosW = posW.xyz;vOut.NormalW = normalW;vOut.Tex = vIn.Tex;return vOut; }

    對于像素著色器來說,由于點光燈和聚光燈都可以看做是物體,所以也應該進行鏡面反射矩陣變換(主要反射光的方向和位置):

    // Basic_PS_3D.hlsl #include "Basic.hlsli"// 像素著色器(3D) float4 PS_3D(VertexPosHWNormalTex pIn) : SV_Target {// 提前進行裁剪,對不符合要求的像素可以避免后續運算float4 texColor = g_Tex.Sample(g_SamLinear, pIn.Tex);clip(texColor.a - 0.1f);// 標準化法向量pIn.NormalW = normalize(pIn.NormalW);// 頂點指向眼睛的向量float3 toEyeW = normalize(g_EyePosW - pIn.PosW);// 初始化為0 float4 ambient = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 diffuse = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 spec = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 A = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 D = float4(0.0f, 0.0f, 0.0f, 0.0f);float4 S = float4(0.0f, 0.0f, 0.0f, 0.0f);int i;[unroll]for (i = 0; i < 5; ++i){DirectionalLight dirLight = g_DirLight[i];[flatten]if (g_IsReflection){dirLight.Direction = mul(dirLight.Direction, (float3x3) (g_Reflection));}ComputeDirectionalLight(g_Material, g_DirLight[i], pIn.NormalW, toEyeW, A, D, S);ambient += A;diffuse += D;spec += S;}// 若當前在繪制反射物體,需要對光照進行反射矩陣變換PointLight pointLight;[unroll]for (i = 0; i < 5; ++i){pointLight = g_PointLight[i];[flatten]if (g_IsReflection){pointLight.Position = (float3) mul(float4(pointLight.Position, 1.0f), g_Reflection);}ComputePointLight(g_Material, pointLight, pIn.PosW, pIn.NormalW, toEyeW, A, D, S);ambient += A;diffuse += D;spec += S;}SpotLight spotLight;// 若當前在繪制反射物體,需要對光照進行反射矩陣變換[unroll]for (i = 0; i < 5; ++i){spotLight = g_SpotLight[i];[flatten]if (g_IsReflection){spotLight.Position = (float3) mul(float4(spotLight.Position, 1.0f), g_Reflection);spotLight.Direction = mul(spotLight.Direction, (float3x3) g_Reflection);}ComputeSpotLight(g_Material, spotLight, pIn.PosW, pIn.NormalW, toEyeW, A, D, S);ambient += A;diffuse += D;spec += S;}float4 litColor = texColor * (ambient + diffuse) + spec;litColor.a = texColor.a * g_Material.Diffuse.a;return litColor; }

    RenderStates類的變化

    RenderStates類變化如下:

    class RenderStates { public:template <class T>using ComPtr = Microsoft::WRL::ComPtr<T>;static void InitAll(ID3D11Device * device);// 使用ComPtr無需手工釋放public:static ComPtr<ID3D11RasterizerState> RSWireframe; // 光柵化器狀態:線框模式static ComPtr<ID3D11RasterizerState> RSNoCull; // 光柵化器狀態:無背面裁剪模式static ComPtr<ID3D11RasterizerState> RSCullClockWise; // 光柵化器狀態:順時針裁剪模式static ComPtr<ID3D11SamplerState> SSLinear; // 采樣器狀態:線性過濾static ComPtr<ID3D11SamplerState> SSAnistropic; // 采樣器狀態:各項異性過濾static ComPtr<ID3D11BlendState> BSNoColorWrite; // 混合狀態:不寫入顏色static ComPtr<ID3D11BlendState> BSTransparent; // 混合狀態:透明混合static ComPtr<ID3D11BlendState> BSAlphaToCoverage; // 混合狀態:Alpha-To-Coveragestatic ComPtr<ID3D11DepthStencilState> DSSMarkMirror; // 深度/模板狀態:標記鏡面區域static ComPtr<ID3D11DepthStencilState> DSSDrawReflection; // 深度/模板狀態:繪制反射區域static ComPtr<ID3D11DepthStencilState> DSSNoDoubleBlend; // 深度/模板狀態:無二次混合區域static ComPtr<ID3D11DepthStencilState> DSSNoDepthTest; // 深度/模板狀態:關閉深度測試static ComPtr<ID3D11DepthStencilState> DSSNoDepthWrite; // 深度/模板狀態:僅深度測試,不寫入深度值 };

    新增的渲染狀態的定義如下:

    void RenderStates::InitAll(ID3D11Device * device) {// 先前初始化過的話就沒必要重來了if (IsInit())return;// ***********初始化光柵化器狀態***********D3D11_RASTERIZER_DESC rasterizerDesc;ZeroMemory(&rasterizerDesc, sizeof(rasterizerDesc));// ...// 順時針剔除模式rasterizerDesc.FillMode = D3D11_FILL_SOLID;rasterizerDesc.CullMode = D3D11_CULL_BACK;rasterizerDesc.FrontCounterClockwise = true;rasterizerDesc.DepthClipEnable = true;HR(device->CreateRasterizerState(&rasterizerDesc, &RSCullClockWise));// ***********初始化采樣器狀態***********// ...// ***********初始化混合狀態***********// ...// ***********初始化深度/模板狀態***********D3D11_DEPTH_STENCIL_DESC dsDesc;// 鏡面標記深度/模板狀態// 這里不寫入深度信息// 無論是正面還是背面,原來指定的區域的模板值都會被寫入StencilRefdsDesc.DepthEnable = true;dsDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ZERO;dsDesc.DepthFunc = D3D11_COMPARISON_LESS;dsDesc.StencilEnable = true;dsDesc.StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;dsDesc.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;dsDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_REPLACE;dsDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;// 對于背面的幾何體我們是不進行渲染的,所以這里的設置無關緊要dsDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_REPLACE;dsDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;HR(device->CreateDepthStencilState(&dsDesc, DSSMarkMirror.GetAddressOf()));// 反射繪制深度/模板狀態// 由于要繪制反射鏡面,需要更新深度// 僅當鏡面標記模板值和當前設置模板值相等時才會進行繪制dsDesc.DepthEnable = true;dsDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;dsDesc.DepthFunc = D3D11_COMPARISON_LESS;dsDesc.StencilEnable = true;dsDesc.StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;dsDesc.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;dsDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;dsDesc.FrontFace.StencilFunc = D3D11_COMPARISON_EQUAL;// 對于背面的幾何體我們是不進行渲染的,所以這里的設置無關緊要dsDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;dsDesc.BackFace.StencilFunc = D3D11_COMPARISON_EQUAL;HR(device->CreateDepthStencilState(&dsDesc, DSSDrawReflection.GetAddressOf()));// 無二次混合深度/模板狀態// 允許默認深度測試// 通過自遞增使得原來StencilRef的值只能使用一次,實現僅一次混合dsDesc.DepthEnable = true;dsDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;dsDesc.DepthFunc = D3D11_COMPARISON_LESS;dsDesc.StencilEnable = true;dsDesc.StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;dsDesc.StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;dsDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_INCR;dsDesc.FrontFace.StencilFunc = D3D11_COMPARISON_EQUAL;// 對于背面的幾何體我們是不進行渲染的,所以這里的設置無關緊要dsDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_KEEP;dsDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_INCR;dsDesc.BackFace.StencilFunc = D3D11_COMPARISON_EQUAL;HR(device->CreateDepthStencilState(&dsDesc, DSSNoDoubleBlend.GetAddressOf()));// 關閉深度測試的深度/模板狀態// 若繪制非透明物體,務必嚴格按照繪制順序// 繪制透明物體則不需要擔心繪制順序// 而默認情況下模板測試就是關閉的dsDesc.DepthEnable = false;dsDesc.StencilEnable = false;HR(device->CreateDepthStencilState(&dsDesc, DSSNoDepthTest.GetAddressOf()));// 進行深度測試,但不寫入深度值的狀態// 若繪制非透明物體時,應使用默認狀態// 繪制透明物體時,使用該狀態可以有效確?;旌蠣顟B的進行// 并且確保較前的非透明物體可以阻擋較后的一切物體dsDesc.DepthEnable = true;dsDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ZERO;dsDesc.DepthFunc = D3D11_COMPARISON_LESS;dsDesc.StencilEnable = false;HR(device->CreateDepthStencilState(&dsDesc, DSSNoDepthWrite.GetAddressOf()));}

    場景繪制

    現在場景內有四面墻,一個平面鏡,一面地板,一個籬笆盒和水面。

    開始繪制前,我們需要清空深度/模板緩沖區和渲染目標視圖:

    md3dImmediateContext->ClearRenderTargetView(mRenderTargetView.Get(), reinterpret_cast<const float*>(&Colors::Black)); md3dImmediateContext->ClearDepthStencilView(mDepthStencilView.Get(), D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);

    第1步: 鏡面區域寫入模板緩沖區

    這一步通過對鏡面所在區域寫入模板值1來標定鏡面繪制區域。

    // ********************* // 1. 給鏡面反射區域寫入值1到模板緩沖區 // // 裁剪掉背面三角形 // 標記鏡面區域的模板值為1 // 不寫入像素顏色 m_pd3dImmediateContext->RSSetState(nullptr); m_pd3dImmediateContext->OMSetDepthStencilState(RenderStates::DSSMarkMirror.Get(), 1); m_pd3dImmediateContext->OMSetBlendState(RenderStates::BSNoColorWrite.Get(), nullptr, 0xFFFFFFFF);m_Mirror.Draw(m_pd3dImmediateContext.Get());

    通過VS圖形調試器可以看到模板值為1的區域

    第2步:繪制不透明的鏡面反射物體

    理論上會有三面墻和地板可能會透過鏡面看到,這里都需要繪制,但要注意在對頂點位置做反射變換時,原來平面向外的法向量變成了平面向內部,因此還需要額外對法向量做反射變換(龍書缺少了對法向量的反射變換)。并且原來按順時針排布的三角形頂點也變成了逆時針排布。所以需要對順時針排布的頂點做裁剪處理。

    在做模板測試的時候,我們僅對模板值為1的像素點通過測試,這樣保證限定繪制區域在鏡面上。

    // *********************** // 2. 繪制不透明的反射物體 //// 開啟反射繪制 m_CBStates.isReflection = true; D3D11_MAPPED_SUBRESOURCE mappedData; HR(m_pd3dImmediateContext->Map(m_pConstantBuffers[1].Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedData)); memcpy_s(mappedData.pData, sizeof(CBDrawingStates), &m_CBStates, sizeof(CBDrawingStates)); m_pd3dImmediateContext->Unmap(m_pConstantBuffers[1].Get(), 0); // 繪制不透明物體,需要順時針裁剪 // 僅對模板值為1的鏡面區域繪制 m_pd3dImmediateContext->RSSetState(RenderStates::RSCullClockWise.Get()); m_pd3dImmediateContext->OMSetDepthStencilState(RenderStates::DSSDrawReflection.Get(), 1); m_pd3dImmediateContext->OMSetBlendState(nullptr, nullptr, 0xFFFFFFFF);m_Walls[2].Draw(m_pd3dImmediateContext.Get()); m_Walls[3].Draw(m_pd3dImmediateContext.Get()); m_Walls[4].Draw(m_pd3dImmediateContext.Get()); m_Floor.Draw(m_pd3dImmediateContext.Get());

    到這時候繪制效果如下:

    第3步:繪制透明的鏡面反射物體

    這一步需要繪制的透明反射物體有籬笆盒以及水面,繪制了這些透明物體后就可以連同鏡面一起混合繪制了。其中籬笆盒要優于水面先行繪制:

    // *********************** // 3. 繪制透明的反射物體 //// 關閉順逆時針裁剪 // 僅對模板值為1的鏡面區域繪制 // 透明混合 m_pd3dImmediateContext->RSSetState(RenderStates::RSNoCull.Get()); m_pd3dImmediateContext->OMSetDepthStencilState(RenderStates::DSSDrawReflection.Get(), 1); m_pd3dImmediateContext->OMSetBlendState(RenderStates::BSTransparent.Get(), nullptr, 0xFFFFFFFF);m_WireFence.Draw(m_pd3dImmediateContext.Get()); m_Water.Draw(m_pd3dImmediateContext.Get()); m_Mirror.Draw(m_pd3dImmediateContext.Get());// 關閉反射繪制 m_CBStates.isReflection = false; HR(m_pd3dImmediateContext->Map(m_pConstantBuffers[1].Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedData)); memcpy_s(mappedData.pData, sizeof(CBDrawingStates), &m_CBStates, sizeof(CBDrawingStates)); m_pd3dImmediateContext->Unmap(m_pConstantBuffers[1].Get(), 0);

    繪制完后效果如下:

    第4步:繪制不透明的正常物體

    這一步僅有墻體和地板需要繪制:

    // ************************ // 4. 繪制不透明的正常物體 //m_pd3dImmediateContext->RSSetState(nullptr); m_pd3dImmediateContext->OMSetDepthStencilState(nullptr, 0); m_pd3dImmediateContext->OMSetBlendState(nullptr, nullptr, 0xFFFFFFFF);for (auto& wall : m_Walls)wall.Draw(m_pd3dImmediateContext.Get()); m_Floor.Draw(m_pd3dImmediateContext.Get());

    第5步:繪制透明的正常物體

    // *********************** // 5. 繪制透明的正常物體 //// 關閉順逆時針裁剪 // 透明混合 m_pd3dImmediateContext->RSSetState(RenderStates::RSNoCull.Get()); m_pd3dImmediateContext->OMSetDepthStencilState(nullptr, 0); m_pd3dImmediateContext->OMSetBlendState(RenderStates::BSTransparent.Get(), nullptr, 0xFFFFFFFF);m_WireFence.Draw(m_pd3dImmediateContext.Get()); m_Water.Draw(m_pd3dImmediateContext.Get());

    完成所有繪制后,顯示效果如下:

    先繪制鏡面場景還是繪制主場景?

    一開始我是根據龍書的順序先繪制主場景,再繪制鏡面場景的。但是在繪制帶有透明物體的場景時,會得到下面的結果:

    可以看到鏡面下面的部分有黑邊,是因為在繪制主場景的時候,黑色背景和水面產生了混合,并且改寫了深度值,導致在繪制鏡面后面的物體(主要是地板部分)時水面以下的部分沒有通過深度測試,地板也就沒有被繪制。

    DirectX11 With Windows SDK完整目錄

    Github項目源碼

    歡迎加入QQ群: 727623616 可以一起探討DX11,以及有什么問題也可以在這里匯報。

    轉載于:https://www.cnblogs.com/X-Jun/p/9380099.html

    總結

    以上是生活随笔為你收集整理的DirectX11 With Windows SDK--12 深度/模板状态、平面镜反射绘制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产在线精品视频 | 亚洲91在线 | 精品视频一区在线 | 免费观看www小视频的软件 | 在线观看日韩精品视频 | 中文字幕在线观看的网站 | 玖玖玖国产精品 | 亚洲精品动漫久久久久 | 高清久久久久久 | 国产精品一区免费观看 | 日韩欧美在线高清 | 久久久久免费精品国产 | 国产精品一区二区久久精品 | 超碰精品在线 | 伊人亚洲综合 | 深夜国产福利 | 中文字幕一区二区三区精华液 | 夜夜躁日日躁狠狠久久av | 丝袜少妇在线 | 国产成人精品女人久久久 | 精品毛片在线 | 日韩免费视频在线观看 | 久久久久这里只有精品 | 精品女同一区二区三区在线观看 | 国产精品岛国久久久久久久久红粉 | 97天堂网 | 国产在线97 | 激情小说久久 | 91精品国产91久久久久久三级 | 中文字幕在线观看免费高清完整版 | 日韩中文字幕在线看 | 五月天久久| 国产精品va在线观看入 | 91最新视频在线观看 | 日本爽妇网| 久久在线观看 | 欧美激情视频一区二区三区免费 | 亚洲伊人网在线观看 | 久久热首页 | 成人香蕉视频 | 国产91区 | 久久的色| 色视频在线免费 | 国产精品美女久久久久久久久 | 又黄又爽的视频在线观看网站 | 激情视频久久 | 亚洲色五月 | 激情久久一区二区三区 | 黄色一级免费电影 | 在线看欧美 | 日日爱影视 | 黄网站色成年免费观看 | 亚洲国产免费 | 久久精品日产第一区二区三区乱码 | 日本精品久久久久中文字幕5 | 成人黄色大片在线免费观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 欧美最新大片在线看 | 久久久精品高清 | 97超碰精品| 国产在线视频一区二区 | 香蕉色综合 | 亚洲精品高清在线 | 免费看三级黄色片 | 久久久国产精品一区二区中文 | 日韩精品一区二区三区外面 | 黄色av网站在线观看免费 | 日韩三级.com | 四虎影视8848dvd | 国产精品永久免费观看 | 久久专区| 欧美片一区二区三区 | 丁香六月欧美 | av 一区二区三区四区 | av播放在线 | 免费高清在线观看成人 | 激情网色 | 国产精品一区二区三区久久 | 欧美国产不卡 | 久久99久久99精品 | 天天天射 | 黄色免费看片网站 | 亚洲黄色区 | 色99网| 少妇自拍av | 婷婷色狠狠 | 国产一二三区av | 国产精品国产三级国产aⅴ9色 | 91最新视频在线观看 | 黄网站色欧美视频 | av日韩国产| 亚洲国产伊人 | 精品国产精品久久一区免费式 | 精品国产成人av在线免 | 又黄又爽又色无遮挡免费 | 成人影视免费看 | 国内免费久久久久久久久久久 | 久久a免费视频 | 日韩欧美一区二区不卡 | av网站在线观看免费 | 欧美日韩91 | 久久香蕉国产精品麻豆粉嫩av | 国产成人不卡 | 九九九九精品九九九九 | 超碰在线人人草 | 欧美成人黄 | 91看成人 | 在线天堂中文在线资源网 | 久久99热这里只有精品国产 | 成人欧美一区二区三区黑人麻豆 | 国产一区二区三区四区在线 | 黄色影院在线免费观看 | 久久不卡电影 | 亚洲精品国 | 日本中文在线 | 免费视频二区 | 中文字幕在线日本 | 久久久久国产一区二区三区四区 | 欧美一级大片在线观看 | 久久永久免费 | 99 久久久久 | 免费观看视频的网站 | 91黄色在线观看 | 最近最新mv字幕免费观看 | 国产精品久久久久久久久久ktv | 精品免费国产一区二区三区四区 | 精品国产欧美一区二区三区不卡 | 二区三区在线 | 中文字幕在线观看一区二区 | 中文字幕在线观看91 | 成人在线观看网址 | 丁香花五月 | 麻豆久久 | 午夜手机看片 | 天天操 夜夜操 | 天天干.com | 国产精品久久久区三区天天噜 | 久久久久免费精品国产小说色大师 | 日韩精品一卡 | 五月天综合色 | 91片在线观看 | 久草观看 | 免费国产黄线在线观看视频 | 中文字幕第一页在线播放 | 右手影院亚洲欧美 | av韩国在线| 西西人体4444www高清视频 | 亚洲精品综合在线 | 狠狠干中文字幕 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 欧美精品在线观看免费 | 欧美国产亚洲精品久久久8v | 欧美日韩视频一区二区三区 | 亚洲 在线| 久久久久影视 | 丁香在线 | 国产色视频网站2 | av在线电影网站 | 国产一级精品视频 | 国产天天爽 | 97人人澡人人爽人人模亚洲 | 久久激情视频 久久 | 国产视频 久久久 | 欧美日视频 | 欧美影院久久 | 久久超级碰视频 | 丰满少妇一级片 | 亚洲精品自拍视频在线观看 | 国产精品大片免费观看 | 国产最顶级的黄色片在线免费观看 | 色婷婷啪啪免费在线电影观看 | 亚洲精品理论片 | av高清一区 | 亚洲精品视频免费在线观看 | 国产精品成人久久久 | 丁香色婷 | 亚洲视屏在线播放 | 亚洲理论在线观看 | 国产伦理一区二区 | 国内精品久久久久久久久久清纯 | 精品麻豆入口免费 | 久久超碰网 | 91中文字幕网 | 亚洲视频观看 | 欧美久久久 | 97超碰人人澡人人 | 97夜夜澡人人双人人人喊 | 久草在线免费在线观看 | 草久在线视频 | 四虎免费av| 精品成人免费 | 探花视频在线观看+在线播放 | 国产午夜精品一区 | 在线综合色| 九九精品视频在线 | www.日本色| 中国一级片在线 | 亚洲综合在线五月天 | 久久久www成人免费毛片 | 欧美在线视频免费 | av在线进入 | 午夜视频在线瓜伦 | aav在线 | 激情五月婷婷 | 精品久久久久久亚洲 | 亚洲精品91天天久久人人 | 成人av免费网站 | 超碰国产在线播放 | 91九色最新地址 | 国产一级免费电影 | 黄色的视频| 一级免费av | 久久久久久蜜桃一区二区 | 国产一二三区av | 日韩毛片在线播放 | 91中文字幕在线视频 | 蜜臀av一区二区 | 久久精品视频中文字幕 | av日韩中文| 欧美日韩视频在线 | 激情五月综合 | 西西444www大胆高清图片 | 久久久国产一区二区三区四区小说 | 在线视频欧美亚洲 | 99久久精品无免国产免费 | 免费在线观看一区二区三区 | 欧美男女爱爱视频 | 97超碰超碰久久福利超碰 | 日韩区欧美久久久无人区 | 国内久久精品 | 日韩国产高清在线 | 亚洲成人高清在线 | 国产h在线播放 | 国产成人精品亚洲 | 一级大片在线观看 | 在线免费性生活片 | 午夜久久视频 | 久久久久免费电影 | 国产成人精品一区二区三区网站观看 | av在线h| 色鬼综合网 | 免费观看v片在线观看 | 精品国产99国产精品 | 久久免费的精品国产v∧ | 欧美黑人猛交 | 色综合久久久久综合 | 国产高清亚洲 | 日韩精品高清视频 | 国产a国产 | 久操伊人 | 国产一二区在线观看 | 国产福利精品视频 | 国产一级一片免费播放放 | 偷拍精品一区二区三区 | 日日夜夜免费精品 | 91精品久久久久久综合五月天 | 免费的黄色的网站 | 欧美日韩啪啪 | 亚洲年轻女教师毛茸茸 | aaa免费毛片 | 人人射 | 日韩高清在线一区二区三区 | 蜜桃视频精品 | 国产黄色免费 | 最近日本中文字幕 | 天天爱天天射天天干天天 | 亚洲免费在线观看视频 | 五月婷婷久 | 天天综合在线观看 | 精品国模一区二区三区 | 国产在线a不卡 | 在线看片视频 | 在线播放av网址 | 麻豆传媒视频在线播放 | av观看在线观看 | 69亚洲乱 | 丁香狠狠 | 日韩久久久久久久久久 | 四虎在线免费视频 | 亚洲高清在线观看视频 | 国产精品久久久久久久av电影 | 国产中的精品av小宝探花 | 国内精品免费 | 精品中文字幕在线 | 亚洲成a人片在线观看网站口工 | 亚洲午夜av| 欧美日韩不卡在线视频 | 亚洲精品一区二区三区在线观看 | 性色av免费看 | 成年人看片网站 | 日韩免费中文 | 亚洲中字幕 | 亚洲国产一区av | 黄色1级大片 | 亚洲丁香日韩 | 视频一区亚洲 | 精品福利av | 亚洲一区二区三区毛片 | 国产+日韩欧美 | 日韩三级在线 | 国产不卡在线看 | 亚洲首页 | 久久dvd| 福利视频入口 | 亚洲精品伦理在线 | 就色干综合 | 亚洲视频h| 极品中文字幕 | 天天在线操 | 国产一区二区在线视频观看 | 国产高清日韩欧美 | 国内精自线一二区永久 | 日本精品一区二区在线观看 | 国产黄色大全 | 超碰97在线看 | 久久桃花网| 伊人久久五月天 | 西西444www高清大胆 | 久久精品www人人爽人人 | 亚洲激情视频在线观看 | 婷婷香蕉| 国产成人精品久久亚洲高清不卡 | 九九免费在线观看 | 精品91视频 | 99激情网 | 国产精品成人一区二区三区吃奶 | 亚洲国产美女久久久久 | 日本久久成人 | 97av在线| 99国产精品视频免费观看一公开 | 天天干夜夜夜 | 久久精品国产免费观看 | 成人免费看电影 | 特级免费毛片 | 亚洲黄色一级大片 | av综合av | 一区二区三区免费看 | 视频一区在线播放 | 中文字幕在线免费97 | 日韩久久网站 | www天天操| 婷婷av网| 激情欧美丁香 | 伊人久久在线观看 | 久久午夜剧场 | 人人爽人人干 | 欧美日韩精品久久久 | 日韩电影中文字幕在线 | 久久精品视频日本 | 亚洲电影第一页av | 成人av电影免费在线观看 | 天天干天天草天天爽 | 欧美福利在线播放 | 久插视频 | av网站在线免费观看 | 亚洲成人av影片 | 日韩欧美一区视频 | 久久尤物电影视频在线观看 | 国产精品麻豆视频 | 在线观看免费高清视频大全追剧 | 久久精品韩国 | 99久久久精品 | 日韩一级电影在线 | 国产青春久久久国产毛片 | 久久视频这里有久久精品视频11 | 亚洲精品乱码久久 | 91av电影网| 91精品一区二区三区蜜桃 | 狠狠躁夜夜a产精品视频 | 国产亚洲午夜高清国产拍精品 | 99在线国产| 久久国产成人午夜av影院宅 | 日韩视频在线播放 | 色五月激情五月 | 日日碰狠狠添天天爽超碰97久久 | 99久久精品网 | 久久97精品 | 亚洲精色 | 国产午夜精品久久 | 亚洲成av| 在线免费国产 | 99精品一区 | 中文国产在线观看 | 午夜婷婷网 | 久在线观看视频 | 国产成人精品综合久久久久99 | 亚洲精品久久久蜜桃 | 摸阴视频| 久久免费视频在线观看30 | 伊人国产在线观看 | 四虎成人网| 亚洲欧洲一级 | 国产精品久久一区二区无卡 | 超碰人人91| 国产亚洲成av片在线观看 | 日韩在线观看小视频 | 久久无码精品一区二区三区 | 国产手机视频在线观看 | 国产精品久久久久久久久久久久午夜片 | 黄色大全在线观看 | 在线看岛国av | 亚洲视频免费 | 91黄视频在线 | 午夜精品电影 | 丁香婷婷激情国产高清秒播 | 午夜精品999 | www.在线看片.com| 婷婷亚洲激情 | 国产夫妻性生活自拍 | 日韩黄色在线观看 | 日韩中文字幕a | 色资源中文字幕 | 免费观看全黄做爰大片国产 | 久久综合五月天 | 少妇性aaaaaaaaa视频 | 在线黄色观看 | 免费av在| 97人人爽人人 | 日韩在线观看一区二区 | 免费av黄色| 亚洲爽爽网 | 国产精品videossex国产高清 | 91毛片视频| 国产精品ssss在线亚洲 | 又爽又黄又无遮挡网站动态图 | 久久久久观看 | 中文字幕在线免费97 | 国产色拍拍拍拍在线精品 | 久久美女高清视频 | 91精品1区2区| 91在线视频 | 人人射 | 亚洲经典中文字幕 | 男女精品久久 | 成人中文字幕+乱码+中文字幕 | 国产电影黄色av | 免费高清无人区完整版 | 美女视频久久黄 | 中文字幕在线观看av | 国产精品成人久久久久久久 | 国产色在线,com | 在线观看网站av | 日韩a欧美 | 亚洲伦理一区 | 欧美日韩视频观看 | 成 人 黄 色 视频 免费观看 | 最新免费av在线 | 成人毛片网 | 中文字幕一区二区三区在线播放 | 狠狠色狠狠色综合日日小说 | 最新超碰| 人人澡人人爱 | 成人免费观看视频网站 | 欧美在线视频免费 | 国产r级在线观看 | 久久精品国产一区二区 | 国产精品99久久久久久宅男 | 成人av网站在线观看 | 亚洲高清精品在线 | 韩日精品在线 | 丁香婷婷色综合亚洲电影 | 久久婷婷开心 | 久草在线视频网 | 色99导航 | 香蕉日日 | 亚洲国产中文字幕在线视频综合 | 日日操天天操夜夜操 | 国产精品久久久久毛片大屁完整版 | 黄色成人91 | 超碰在线9 | 久久综合射 | 久久久国产精品一区二区中文 | 在线播放亚洲激情 | 九九九毛片 | 国产精品1区2区3区在线观看 | 久久国产精品99久久人人澡 | 天天操天天射天天插 | 国产一级视频免费看 | 9999在线观看 | 毛片精品免费在线观看 | 国产精品影音先锋 | 五月天久久精品 | 天天综合网国产 | 成人久久影院 | 亚洲成av人片在线观看 | 久久免费国产视频 | 在线观看岛国片 | 亚洲全部视频 | www黄色av| 91精品国产成人 | 五月婷婷在线播放 | 午夜91视频| 久久久久久中文字幕 | 在线观看你懂的网站 | 夜夜视频欧洲 | 伊人天天| 九九热精品视频在线播放 | 一区二区中文字幕在线观看 | 成人在线免费观看网站 | 九九久久影视 | 中文字幕在线观看免费 | 日韩视频1区 | 中文字幕888 | 青青草久草在线 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 一区二区三区在线观看免费视频 | 国产裸体永久免费视频网站 | 精品国产大片 | 日韩视频在线观看免费 | 免费精品人在线二线三线 | 欧美日韩国产区 | 国产手机视频在线播放 | 一区二区三区免费播放 | 久久精品中文视频 | 免费福利在线视频 | 国产字幕在线看 | 亚洲理论片| 日韩理论电影在线 | 婷婷丁香社区 | 天天草天天操 | 日韩欧美高清免费 | 日韩电影在线观看一区二区三区 | 综合久久久久久久久 | 日本爱爱免费视频 | 天天干夜夜夜 | 欧美一区在线观看视频 | 综合精品在线 | 麻豆久久 | 九九热有精品 | 在线观看黄色av | 一区精品在线 | 国产精品久久嫩一区二区免费 | 丁香五月亚洲综合在线 | 狠狠操狠狠操 | www黄色大片 | 日韩高清 一区 | 日日夜夜婷婷 | 久久久精品影视 | 亚洲人成人在线 | 久久综合9988久久爱 | 久久久免费看片 | 最近乱久中文字幕 | 国产无套精品久久久久久 | 91久久人澡人人添人人爽欧美 | 色综合天天综合网国产成人网 | 午夜国产一区二区 | 美女网站在线看 | 国产麻豆精品95视频 | av三级在线看 | 在线观看日韩中文字幕 | 国产美女被啪进深处喷白浆视频 | 欧美视频网址 | 国色天香第二季 | 伊人va| 中文字幕在线观看一区二区 | 成人毛片a | 日韩高清精品免费观看 | 伊人超碰在线 | 中文字幕一区二区三区四区久久 | 亚洲韩国一区二区三区 | 国产精品一区二区无线 | 久久超| 国产高清视频免费最新在线 | 日本中文字幕久久 | 一二三四精品 | 81国产精品久久久久久久久久 | 国产黄色片免费在线观看 | 国产亚洲精品久久久久久移动网络 | 亚洲天天综合网 | 激情五月婷婷激情 | 欧美日韩高清不卡 | 91亚洲精品久久久蜜桃 | av高清一区二区三区 | 啪啪动态视频 | 麻花传媒mv免费观看 | 成人污视频在线观看 | 成人免费中文字幕 | 天天综合色 | 中文字幕美女免费在线 | 午夜精品一区二区三区在线 | 国产一区在线视频 | 2019天天干天天色 | 视频 天天草 | 欧美激情在线看 | 亚洲精品在线观看网站 | 五月婷婷久久综合 | 亚洲japanese制服美女 | 国产精品第54页 | 视频国产在线 | 亚洲精品乱码久久久久久 | 国产看片 色 | av免费电影在线观看 | 日日久视频 | 亚洲女人av| 日批网站免费观看 | 最新成人av | 久久精品视频免费观看 | 天天射天 | 91九色自拍 | 91视频下载 | 18网站在线观看 | 免费观看av | 福利久久久 | 中文字幕在线播放第一页 | 国产一级久久久 | 91在线视频在线观看 | 日韩中文字 | 丁香 久久 综合 | 一区二区三区高清在线观看 | 欧美日韩网站 | 最近中文字幕久久 | 9999精品免费视频 | 91色综合| 国产中文字幕视频在线 | 97超碰精品 | 国产91亚洲| 久久狠狠一本精品综合网 | 天天天插 | 人人舔人人舔 | 夜夜夜草 | 亚洲成人精品久久久 | 在线视频欧美亚洲 | 国产高清视频免费在线观看 | 亚洲精品中文在线资源 | 色婷婷av在线 | 精品久久久久久久久久 | 国产专区在线播放 | 欧美激情视频在线观看免费 | 丁香激情五月婷婷 | 婷婷 中文字幕 | 久久午夜影院 | 成人久久久久久久久久 | 97超碰人人模人人人爽人人爱 | 欧美日韩国产精品爽爽 | 999久久久免费精品国产 | 日韩在线观看一区二区三区 | 99视频在线观看视频 | 最近最新中文字幕 | 91插插插免费视频 | 亚洲精品在线国产 | 99视频+国产日韩欧美 | 亚洲精欧美一区二区精品 | 激情久久伊人 | 韩国三级一区 | 天天爱天天操天天爽 | www最近高清中文国语在线观看 | 久久精品艹 | 亚洲欧洲精品一区二区精品久久久 | 91视频com| 视频91| 天天草av| 久久99视频 | 综合成人在线 | 99久久精品久久久久久清纯 | 亚洲乱码精品久久久 | 成人影视片 | 麻豆91网站 | 亚洲经典中文字幕 | 色婷婷97| 亚洲精品18日本一区app | 麻豆视频网址 | 国产高清av在线播放 | 亚洲综合精品视频 | 91av原创| 国产亚洲视频中文字幕视频 | 一区二区视频在线免费观看 | 一二三区高清 | 奇米影视8888在线观看大全免费 | 麻豆一二三精选视频 | 国产黄色片免费看 | 天天操天天摸天天爽 | 久久激情影院 | 精品久久久久久亚洲 | 免费观看成年人视频 | 午夜国产在线 | 97电影在线看视频 | 深爱五月激情网 | 在线观看av黄色 | 婷婷色在线观看 | a天堂一码二码专区 | 亚洲黄色影院 | 国产精品免费在线观看视频 | 欧美一级电影 | 欧美一级在线观看视频 | 一区二区欧美日韩 | 欧美在线观看视频 | 国产日韩欧美视频在线观看 | 欧美日韩一区二区三区不卡 | 丁香亚洲| 日韩专区一区二区 | 精品亚洲va在线va天堂资源站 | 在线观看麻豆av | 91精品蜜桃| 黄色片免费看 | 蜜桃视频日本 | 亚洲精品在线观看中文字幕 | 激情综合五月天 | av在线成人 | 永久免费精品视频网站 | 一级特黄aaa大片在线观看 | 亚洲精品456在线播放 | 天天插天天操天天干 | 一区二区欧美在线观看 | 成人亚洲欧美 | 亚洲日本成人网 | 免费观看v片在线观看 | 一区二区三区四区五区在线 | 日日干美女| 国产专区欧美专区 | 日韩欧美国产视频 | 超碰免费在线公开 | 99免费在线播放99久久免费 | 国产九色91 | 精品影院一区二区久久久 | 成人在线观看网址 | 亚洲影院天堂 | 国产中文字幕一区二区 | av天天澡天天爽天天av | 最新一区二区三区 | 香蕉视频在线观看免费 | 天天碰天天操视频 | 免费网站在线 | 91人人澡人人爽 | 欧美日韩精品综合 | 激情视频在线观看网址 | 午夜在线看片 | 国产精品入口传媒 | 麻豆综合网 | 中文字幕影片免费在线观看 | 国产黄色免费在线观看 | 亚洲欧美怡红院 | 日韩激情久久 | 99精品国产一区二区三区不卡 | 天天综合五月天 | 欧美日韩69| 亚洲国产成人精品在线观看 | 国产小视频在线播放 | 日韩欧美电影网 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 日日噜噜噜噜夜夜爽亚洲精品 | av免费在线观看网站 | 国产高清网站 | 亚洲 中文 在线 精品 | av电影亚洲| 99热日本 | 亚洲男男gⅴgay双龙 | 五月天亚洲婷婷 | 少妇bbb搡bbbb搡bbbb′ | 黄色成人影院 | 国产中文字幕大全 | 日韩高清久久 | 色哟哟国产精品 | 午夜精品99久久免费 | 久久亚洲在线 | 男女拍拍免费视频 | 国产精品久久久久久久久久直播 | 色婷婷视频在线观看 | 在线视频1卡二卡三卡 | av电影一区二区 | 91丨九色丨高潮丰满 | 国产精品刺激对白麻豆99 | 欧美一级日韩免费不卡 | 九色免费视频 | 亚洲成人动漫在线观看 | 国产黄色电影 | 91福利小视频| 十八岁以下禁止观看的1000个网站 | 国产原创在线 | 99精品在线免费在线观看 | 99热这里只有精品在线观看 | 91高清在线| av在线播放网址 | 在线观看免费高清视频大全追剧 | 日韩专区中文字幕 | 久久久影视 | 日日射av | 日韩av网站在线播放 | 在线观看成人一级片 | 久久人人爽人人爽人人片av免费 | .国产精品成人自产拍在线观看6 | 久久狠狠干 | 视频在线一区二区三区 | 97干com| 日韩电影一区二区在线 | 久久综合之合合综合久久 | 免费日韩一区二区三区 | 色网站免费在线看 | 天天插综合 | 国产精品欧美久久久久无广告 | 亚洲精品乱码久久久久久9色 | 丝袜美腿av | 日韩久久精品 | 国产精品久久久视频 | 五月视频 | a级国产乱理论片在线观看 特级毛片在线观看 | 中国一 片免费观看 | 久久中文字幕在线视频 | 亚洲精品国产精品乱码在线观看 | 99国产精品 | 久久久久久黄 | 国产视频精品久久 | 精品99免费视频 | 91精品少妇偷拍99 | 免费看的黄色 | 在线v片免费观看视频 | 丰满少妇一级 | 一区二区中文字幕在线播放 | 精品国产乱码久久久久久1区二区 | 91精品999| 精品一二三四在线 | 最新日本中文字幕 | 日韩高清www | 97超在线视频 | 中文字幕亚洲五码 | 久久免费精彩视频 | 久久久久亚洲精品男人的天堂 | 四虎免费在线观看视频 | 天天射天天干天天插 | 天天干天天草 | 久久综合精品国产一区二区三区 | 免费在线观看av | 成人黄色小说在线观看 | 欧美aⅴ在线观看 | 久久久精品国产免费观看一区二区 | 久久成年人 | 91精品啪在线观看国产线免费 | 99精品视频精品精品视频 | 久久国产精品电影 | 天天爽天天爽夜夜爽 | 欧美视频日韩视频 | av天天色 | 美女久久| 国产精品女同一区二区三区久久夜 | 色婷婷av一区二 | 国产成人精品av在线观 | 色在线网站 | 国产又粗又长的视频 | 91精品国产92久久久久 | 久久96| 久久精品99国产精品日本 | 久久久久久久久福利 | 久久99国产精品自在自在app | 色婷婷视频网 | 麻豆免费精品视频 | 午夜视频一区二区三区 | 国产精品mm| 欧美国产日韩一区 | 国产精品青青 | 99成人在线视频 | 99热这里只有精品久久 | 久草资源在线 | 在线观看视频国产一区 | 久久9999久久| 久久久久久久久久久高潮一区二区 | 色综合久久综合网 | 婷婷五月色综合 | 国产69精品久久久久久 | 国产福利午夜 | 最近最新中文字幕 | 亚洲伊人第一页 | 亚洲欧美日韩国产一区二区三区 | 国产小视频在线播放 | 日韩欧美专区 | 色天天综合网 | 在线观看免费福利 | 久久情侣偷拍 | 久草视频在 | 欧美精品乱码久久久久 | www.激情五月.com | 三级在线视频播放 | 中国一区二区视频 | 国产视频在线一区二区 | h视频在线看 | 久久久久久国产精品 | 麻豆精品视频 | 丝袜+亚洲+另类+欧美+变态 | 99欧美 | 色的网站在线观看 | 精品视频免费 | 五月婷婷电影网 | 欧美日韩精品电影 | 91资源在线视频 | 国产精品一区二区久久久 | 欧洲一区二区在线观看 | 国产精品一区二区三区观看 | av中文字幕在线免费观看 | 丁香五月亚洲综合在线 | 日韩乱码中文字幕 | 在线免费观看黄色 | 五月婷婷在线视频 | 五月天激情在线 | 黄色三级视频片 | a级一a一级在线观看 | 久久久久久久久久免费视频 | 欧美一区在线看 | 久久精品免费观看 | 色偷偷人人澡久久超碰69 | 探花视频在线观看免费 | 99精品免费久久久久久久久日本 | 91污污视频在线观看 | 国产精品手机看片 | 日韩在线观看一区二区 | 91日韩国产 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | www黄色com | av不卡中文 | 人人射人人澡 | 欧美日韩在线播放 | 久久久综合电影 | 天天要夜夜操 | 色婷婷成人网 | 中文字幕 国产视频 | 三级毛片视频 | 97天堂网| 日韩精品视频免费专区在线播放 | 久久优| 亚洲欧美婷婷六月色综合 | 国产99久久久国产精品成人免费 | 国产在线精品视频 | 久久全国免费视频 | 欧美极品xxx | 亚洲精品免费在线观看视频 | 美女网站在线看 | 正在播放 国产精品 | 久久久久一区二区三区四区 | a级片韩国 | 欧美国产日韩在线视频 | 欧美成人高清 | 亚洲另类视频在线观看 | 成人国产一区二区 | 99在线观看视频 | 久久色网站 | 久久人人精 | 久久久黄视频 | 91黄色成人 | 激情视频亚洲 | 国产91精品看黄网站在线观看动漫 | 国产小视频精品 | 91成人精品视频 | 欧美污污网站 | 久久99热国产 | 在线视频观看亚洲 | 不卡电影一区二区三区 | 国产拍在线 | 亚洲精品一区二区在线观看 | 久久精品8 | 波多野结衣在线观看视频 | 国产精品第10页 | 美女国产免费 | 色国产在线 | 久久久久国产精品一区二区 | 午夜精品久久久久久久99无限制 | www.香蕉视频在线观看 | 狠狠做深爱婷婷综合一区 | 狠狠地日| 欧美日韩午夜 | 欧美在线视频二区 | 国产第一二区 | 五月婷婷激情五月 | 天天做综合网 | 亚洲极色| 操久久免费视频 | 夜夜躁日日躁狠狠久久av | 久久综合射 | 国产区精品视频 | 成年人国产精品 | 久久综合射 | 色婷丁香| 国产成人精品国内自产拍免费看 | 在线看福利av | 亚洲va天堂va欧美ⅴa在线 | 中文字幕在线看视频国产中文版 | 91日韩免费 | 国产99久久久精品视频 | 色中文字幕在线观看 | 奇米四色影狠狠爱7777 | 天天干一干 | 黄色三级网站在线观看 | 久久久久久综合 | 日韩在线免费电影 | av资源免费看 | 久久96| 在线观看国产www | 香蕉视频在线免费 | 可以免费看av| 久久久精品国产一区二区 | 国产精品专区一 | 西西444www大胆无视频 | 欧美一区二区三区在线视频观看 | 一区二区伦理 | 91av视频网| 久久久免费视频播放 | 成人毛片久久 | 最近中文字幕第一页 | 在线观看国产一区 | 丁香婷婷激情国产高清秒播 | 日韩精品久久久久久久电影竹菊 | 婷婷国产一区二区三区 |