是否可以使用Cg修改片段(像素)着色器中的像素座標?我確定這樣的功能在第二代/第三代着色器中可用,但我不知道準確的配置文件,或者如何去做。如何修改/替換Cg片段着色器中的像素位置?
1
A
回答
1
不,這是不可能的。
您可以在片段着色器中修改的唯一座標是進入Z緩衝區的Z.即便如此,它也會帶來性能上的影響,因爲它會挫敗一些優化(如Hierarchical Z)。
在執行片段着色器之前設置X和Y位置(在Rasterizer中)。典型的光柵化器實際上至少生成2×2塊像素,硬件並不能單獨處理像素,一直到混合階段。
有些人傾向於模仿這種類型的功能是產生比必要的更多的像素,並丟棄無關的像素。
你聽到的功能可能是tesselation。它不是作爲片段着色器的一部分完成的,而是管道的一個獨立部分,它允許生成其他幾何體。
最終,你可以使用什麼技術取決於你想要達到的目標。但是X和Y的全面修改從來沒有得到過各種API的支持,無論是Cg,OpenGL還是DirectX,因爲硬件無法做到這一點。
1
您不能實時修改位圖的實際像素,但可以取代U/V座標映射,這將更改每個像素映射的點。
將UV映射設想爲紅色和綠色漸變。紅色表示X位置映射,綠色表示Y位置映射。如果你要乘以這些座標,比如perlin噪聲,映射將被抵消,因此,像素也是如此。
相關問題
- 1. WebGL:我如何獲取片段着色器中每個像素的位置?
- 2. 如何在CPU上運行Cg頂點/片段着色器?
- 3. 如何獲取片段着色器中的像素信息?
- 4. 通過片段/像素着色器改變特定的像素顏色?(opengl)
- 5. 如何將GameObject的轉換位置傳遞給我的CG着色器?
- 6. CG着色器語言默認片段着色器會發生什麼?
- 7. GLSL:頂點着色器無片段着色片段着色器
- 8. CG着色器,控制每個片段的Z-Write?
- 9. 如何獲取片段着色器生成的像素/片段列表?
- 10. 如何將片段着色器應用於每個像素?
- 11. 堆疊Cg着色器
- 12. cg着色器參數
- 13. 帶修改頂點的飛機上的片段着色器
- 14. AGAL:計算片段着色器中的屏幕空間位置
- 15. HLSL在像素着色器中設置像素位置以控制像素在紋理中的最終位置
- 16. 片段着色器如何知道用於像素顏色的變量?
- 17. OpenGL片段着色器VS DirectX片段着色器
- 18. 將表面着色器轉換爲片段着色器
- 19. 色彩漸變着色器(cg/shaderlab)
- 20. 如何在渲染之間更改片段着色器顏色?
- 21. 如何交換當前片段着色器顏色與鄰居?
- 22. Android - 更改位圖GLES20的紋理 - 片段着色器
- 23. JMonkey濾鏡着色器 - 獲取片段的世界位置
- 24. OpenGL片段着色器如何知道在紋理中採樣哪個像素?
- 25. 從幾何着色器的片段着色器
- 26. Three.js - 根據屏幕上像素位置進行着色的頂點着色器
- 27. three.js - 片段着色器基礎知識 - 通過它的位置爲片段着色
- 28. 將位置輸入到像素着色器中
- 29. 僅對可見像素執行片段着色器
- 30. AS3 Stage3D片段着色器?
好的,我該如何修改CG中的z?位移是我猜的正確的術語...我如何傳遞z位置並改變它? –
您可以通過DEPTH語義更改Z(鍵入爲float)。 Cg規範說明了這一點:「[,,,]默認值是從光柵化程序獲得的插值深度。從語義上講,這個默認值被複制到片段程序執行開始時的輸出中。 – Bahbar