簡體   English   中英

DirectX 11 - 點光陰影

[英]DirectX 11 - Point light shadowing

我正在努力在 DirectX 11 中使用立方體陰影貼圖來實現點光源陰影。我四處搜索,似乎只有 OpenGL 或更早版本的 DirectX 中的教程。 在可能的情況下,我使用 CreateTexture2D()、CreateDepthStencilView() 和 CreateShaderResourceView() 設置了陰影貼圖紋理。 然后我不確定如何為立方體貼圖的每個面添加不同的“相機”位置以及如何計算視圖/投影矩陣。 我目前有適用於聚光燈/平行光的陰影,但我以前從未使用過立方體貼圖。 我只需要一些東西讓我開始。 先感謝您。

編輯:我目前有一個 D3D11_TEXTURE2D_DESC 變量來創建陰影紋理作為 TEXTURECUBE; 深度模板已使用 D3D11_DEPTH_STENCIL_VIEW_DESC 創建,着色器資源視圖已使用 D3D11_SHADER_RESOURCE_VIEW_DESC 創建。 我希望他已經創建了立方體貼圖紋理。 我不確定如何使用每個面的視圖/投影矩陣對其進行初始化,然后將其傳遞給頂點或可能的幾何着色器。 任何幫助深表感謝。

對於每個點光源,您應該按如下方式渲染 6 個立方體貼圖面:相機的位置就是點光源的位置。 您應該使用具有方面 1 和 90 度視野的透視投影。 相機的方向取決於您正在渲染的立方體貼圖面。 我是這樣用的:

switch (faceId)
{
case 0:
    // right
    return glm::vec3(1.0f, 0.0f, 0.0f);
case 1:
    // left
    return glm::vec3(-1.0f, 0.0f, 0.0f);
case 2:
    // up
    return glm::vec3(0.0f, 1.0f, 0.0f);
case 3:
    // down
    return glm::vec3(0.0f, -1.0f, 0.0f);
case 4:
    // front
    return glm::vec3(0.0f, 0.0f, 1.0f);
case 5:
    // back 
    return glm::vec3(0.0f, 0.0f, -1.0f); // ok
}

對於相機向上矢量:

switch (faceId)
{
case 0:
case 1:
case 4:
case 5:
    return glm::vec3(0.0f, 1.0f, 0.0f);
case 2:
    return glm::vec3(0.0f, 0.0f, -1.0f);
case 3:
    return glm::vec3(0.0f, 0.0f, 1.0f);
}

我還建議從着色器中寫入線性深度。 這將使影子測試容易得多。 對於陰影貼圖,只需使用立方體貼圖采樣器的點光源方向並比較(線性)距離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM