我試圖使用ID3D11Texture2D
上的模板緩衝將一個紋理的一部分覆蓋在另一個紋理上。我打算通過在模板緩衝區上繪製所需的形狀然後複製紋理來完成此操作。請爲2D紋理的示例代碼提供一些很好的教程,以瞭解模板緩衝區的用法。 (或者這樣的一些替代方式)在Direct3D中使用模板緩衝
1
A
回答
13
模板掩模101:
- 所有主流的GPU使用8位模板緩衝,以及它們被設置到深度緩衝區,所以你必須選擇一個緩衝格式包括模板(D24S8主要)
- 清除深度和模板都爲每幀的開頭,以避免幀間的性能問題*(參見下面的註釋)
- 除非你知道自己在做什麼,用0xFF的用於讀取和寫掩碼在任何時候。
- 出於性能方面的考慮,不會做模版讀取測試
- 出於性能的考慮,當啓用深度寫作,如果可能的話,保持模板讀限於== 0和!= 0的測試,並清零
- 如果您使用的是D3D9,您可以使用剪刀矩形和清除模板緩衝區,這比手動渲染四邊形以將緩衝區設置回零快很多。
- 無法在着色器中訪問模板信息,所以後處理效果無法確定相鄰像素的模板狀態,而不將遮罩置於正常的渲染目標中並作爲紋理進行採樣。
- 模版緩衝器值可以從下面的條件進行修改:
- 模版測試失敗
- 深度測試失敗
- 的模板及深度測試均通過
- 無論條件是首先確定該動作可以是
- 保留(僅留下模板值)
- 替換
- 增量(添加1至當前緩衝區)
- 遞減(從模版緩衝器子1)
- 零(與「stencilref」值來替換模板值)(直接零設置的值,當其他條件之一需要使用當前stencilref值)
*不遵守大多數這些規則通常會導致最壞的情況下模具性能非常有用:您的像素着色器執行每個像素,而不是爲模板蒙版像素執行提前拒絕。此外,在較舊的Geforce卡上,這也可能導致所有後續繪製調用的早期深度拒絕的破壞,直到下一個幀或深度緩衝區模板被清除後纔會被修復。
模板面具其實是很容易產生:
- 清除模板緩存
- (與stencilref 1或代替「保持」增量'替換')啓用模板編寫模板狀態
繪製一個多邊形。需要注意的是,在着色器使用「取消」將防止更新模板,這是你如何載入紋理到模板緩存(但只作爲一個二元掩模)
禁用模板寫,使模板測試
- (理想情況下)也關閉深度寫入
- 畫出你的效果,需要模板掩蔽
+0
謝謝,如果您可以給我一些代碼示例,說明如何在D3D11中使用模板緩衝區來實現一些基本效果,那麼這將非常有用。 – 2011-06-21 05:43:09
相關問題
- 1. 在iOS中使用模板緩衝區
- 2. 緩衝direct3d繪製操作
- 3. 模板緩衝區在OpenGL
- 4. 模板緩衝器和模板測試
- 5. PHP模板循環緩衝
- 6. OpenTK模板緩衝區
- 7. 如何在食人魔中使用模板緩衝區掩碼?
- 8. 綁定模板渲染緩衝區幀緩衝區在OpenGL
- 9. 如何使用Managed Direct3D檢查32位z緩衝區?
- 10. 用模板緩衝區繪製文本
- 11. MonoGame:模板緩衝區不起作用
- 12. elm-webgl中的模板緩衝
- 13. 在Direct3D中與頂點和索引緩衝區掙扎
- 14. 將模板緩衝區模糊到顏色緩衝區中。可能嗎?
- 15. Libgdx模板緩衝區重疊
- 16. webgl繪圖順序,模板緩衝
- 17. 模板緩衝區測試設置DirectX9
- 18. 模板緩衝區讀/寫掩碼
- 19. 模板緩衝區VS原始鑲嵌
- 20. OpenGl:模板緩衝區問題(Wall + Window)?
- 21. OpenGL模板緩衝區OR操作?
- 22. 如何從Direct3D 11中的CPU訪問幀緩衝區?
- 23. 在SlimDX傳遞參數給定緩衝區的Direct3D 11
- 24. 在Visual Studio 2012中缺少模板Direct3D應用程序
- 25. PHP樣輸出緩衝(讓子模板影響主模板)
- 26. 在iOs中使用Open GL 1.0模板緩衝區進行屏蔽問題
- 27. 如何在OpenGL ES 2.0中使用模板緩衝區創建FBO?
- 28. webGL - 如何在幀緩衝區旁邊設置模板緩衝區並使用它?
- 29. 模板緩衝區在現代OpenGL中仍然相關嗎?
- 30. 在OpenGL中更新模板緩衝區時的問題
請一些人給我一個鏈接,使用'模板Buffer'的'Direct3D'一個很好的教程有一些基本的例子一樣掩蔽像素。 – 2011-05-31 12:29:40