在D3D HLSL中,我們可以直接將深度值輸出到深度寄存器中。但它要求的值應該在0和1之間。深度值是否可以大於1?
如果我想將深度設置爲大於1,我該怎麼做?
用於存儲深度值的24位對於我非常大的場景圖非常有限。
在D3D HLSL中,我們可以直接將深度值輸出到深度寄存器中。但它要求的值應該在0和1之間。深度值是否可以大於1?
如果我想將深度設置爲大於1,我該怎麼做?
用於存儲深度值的24位對於我非常大的場景圖非常有限。
您可以在[0,1]之外輸出一個值,但在深度測試(如果啓用)之前以及在寫入深度目標之前,它會被鉗位到[0,1]範圍。對於Z16/Z24格式(甚至不能代表[0,1]以外的值)和Z32F格式都適用。
爲什麼24比特太有限 - 你需要更大的範圍還是你需要更高的精度?
你的問題表明你需要一個比[0,1]更大的範圍,但是你的場景圖可以使用任何你想要的範圍,只要頂點着色器將範圍映射到[0,1](這個範圍映射通常發生在模型/視圖/投影轉換中)。
如果您需要更高的精度,您無法在本地獲得:在整個API和硬件中使用的32位浮點數只有23個尾數位,隱式前導1有效地爲您提供24位精度。爲了解決這個問題,典型的解決方案是將世界切成片段(例如網格),並存儲相對於片段的對象位置。當對象從一個片段移動到另一個片段時,將其位置轉換爲與新細分有關。渲染時使用包含相機的段作爲(0,0,0)並將視錐體內的線段映射到[0,1]深度範圍。
「24位......」是否只是隨機觀察,還是問題的一部分? –