是否有任何快速(用於性能)的方式來檢測glsl中是否多段採樣碎片,但是在第二遍(淺)通過使用第一遍渲染後的紋理。或者opengl如何存儲關於多重採樣的信息?如何在glsl中檢測片段是否被多重採樣?
回答
他們是幾個。通常的做法是檢查當前的座標(gl_FragCoord)是(0.5,0.5)。如果是,則意味着您處於多邊形的中間:僅採樣一次。
它不是,它可能是4(對於4xMSAA)旋轉方角的其中一個:你處於邊緣,而openGL檢測到只有一個樣本是不夠的。
也http://www.opengl.org/pipeline/article/vol003_6/
見爲了在第二遍這個信息,你必須將其存儲在G緩衝區,雖然。
編輯:這是我剛剛完成的代碼片段。使用1024x1024 4xMSAA紋理測試GTX 470。
頂點着色器:
#version 400 core
uniform mat4 MVP;
noperspective centroid out vec2 posCentroid;
layout(location = 0) in vec4 Position;
void main(){
gl_Position = MVP * Position;
posCentroid = (gl_Position.xy/gl_Position.w)*512; // there is a factor two compared to 1024 because normalized coordinates have range [-1,1], not [0,1]
}
片段着色器:
#version 400 core
out vec4 color;
noperspective centroid in vec2 posCentroid;
void main()
{
if (abs(fract(posCentroid.x) - 0.5) < 0.01 && abs(fract(posCentroid.y) - 0.5) < 0.01){
color = vec4(1,0,0,0);
}else{
color = vec4(0,1,0,0);
}
}
邊緣綠色,多邊形的中心是紅色的。
對於你原來的問題,我建議你這篇文章:http://www.gamasutra.com/view/feature/3591/resolve_your_resolves.php
gl_FragCoord是位置[0,screen_size]。我嘗試通過此代碼檢測相對位置(vec2 a = gl_FragCoord.xy - floor(gl_FragCoord.xy); \t if(ax!= 0.5 && ay!= 0.5) \t \t gl_FragColor = vec4(1,0 ,0,1); \t其他{ \t \t gl_FragColor = vec4(0,1,0,1); \t}),但它並沒有工作 – kravemir 2010-09-09 16:07:38
這是正常的。你必須使用不同的質心(gl_FragCoord不是質心)。我必須檢查一下,當我知道如何去做時,我會盡快回復你。 – Calvin1602 2010-09-09 19:57:22
@Miro http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=277450所以像這樣:VS - > out centroid fragcoord; main(){fragcoord = MVP * in_Position; fragcoord.xy/= fragcoord.w;}和FS - >你做了什麼,但與fragcoord – Calvin1602 2010-09-09 20:14:06
選擇像素格式時,在創建景時會激活多重採樣。之後,您無法關閉或打開。但是,當渲染到紋理時,無論Symx的設置如何,OpenGL都不會使用多重採樣。
- 1. 如何檢查採樣器在glsl中是否爲空?
- 2. 在GLSL 4.1片段着色器使用「取消」與多重採樣
- 3. 多重採樣和片段着色器
- 4. SQL檢查數據是否被採樣
- 5. GLSL檢查片段是否在幾何體上
- 6. 如何檢查片段是否存在?
- 7. GLSL紋理多個片段
- 8. 檢測片段何時被繪製?
- 9. 多重採樣和片段着色器330
- 10. 如何檢測照片是否被拍攝(照相機意圖)
- 11. 多重採樣紋理採樣
- 12. SharpDX中的多重採樣
- 13. 在iPad上多重採樣
- 14. 如何檢測ViewController是否被激活?
- 15. 如何知道片段是否被重新創建
- 16. 如何在texture2D中正確採樣紋理座標glsl
- 17. 顯式多重採樣與OpenGL中的常規多重採樣有何不同
- 18. 如何檢測字段是否被觸摸或點擊?
- 19. 如何檢測是否所有的JSON字段都被解析?
- 20. 訪問2010如何檢查是否是/否字段被選中
- 21. 子採樣壓縮檢測
- 22. 在數碼照片中,如何檢測一座山是否被雲遮擋?
- 23. 在framebuffer中渲染多重採樣和單採樣紋理
- 24. 如何使用OpenGL FBO多重採樣
- 25. 如何檢測Console.In(stdin)是否已被重定向?
- 26. 如何檢測iFrame是否被重定向到另一個url?
- 27. 如何通過重定向檢測頁面是否被請求?
- 28. 如何檢測URL是否被重定向到另一個?
- 29. (KnockoutJS)如何檢測HTML是否被重新渲染
- 30. Turnserver是否被檢測到?
你爲什麼要檢測你的GLSL片段程序?使用兩個不同的着色器會更容易,一個是多點採樣,另一個是關閉時,因此在渲染過程中不需要檢查它,也不需要測試開銷。 – tibur 2010-09-07 20:52:42
用於延遲渲染中較低的內存使用量。什麼時候片段多重採樣,然後做所有采樣的光照,如果不是那麼只有一個採樣。 – kravemir 2010-09-08 14:17:33