OpenGL 片元着色及輸出 - 台部落
文章推薦指數: 80 %
gl_FragCoord 在片元着色器階段很有用, x, y 是窗口空間的值,單位是像素。
如果用戶沒有寫入gl_FragDepth, z 值將被寫入, gl_FragCoord 是 1/Wclip ...
請輸入正確的登錄賬號或密碼
註冊
忘記密碼
首頁
opengl
正文
OpenGL片元着色及輸出
原創
Night_Aurora
2020-06-0712:13
片元着色器處理光柵化後的產生片元並輸出一系列的顏色和一個深度值。
片元着色器是圖元光柵化後,OpenGL顯示管線的下一階段,被圖元覆蓋的像素將產生輸出。
每一個片元着色器都具有窗口空間的位置和一系列在前一階段頂點着色器輸出的逐頂點插值。
片元着色器將輸出一個深度值(depthvalue範圍0-1),也可能包含一個模版值(看定義的深度緩衝格式是否包含模版GL_DEPTH_COMPONENT24,GL_DEPTH_COMPONENT32,模版緩存被啓用,該值在着色器中不會被修改),零 到多個顏色值,這些值將被寫入到幀緩存中。
特性:
該階段是可選的
片元着色器是可選階段,如果不使用片元着色器,顏色輸出是未定義的,且不會改變深度、模版緩存值。
可以利用這一特性,在頂點着色器中計算深度值,(沒有片元着色器,不改變其值)直接刷新深度緩衝區, 實現陰影繪製和預處理深度通道等技法。
特殊操作
輸出偏導數,在着色器中使用諸如dFdx(),dFdy()這一類函數。
使用discard命令終止顏色、圖像、着色器存儲緩存對象的寫入及原子操作。
使用【layout(early_fragment_tests)in】限定符執行 預逐像素處理,好處是隻有像素可見,才執行圖像讀寫等消耗系統資源的操作,是OpenGL4.2加入的新特性 。
Thefollowing Per-SampleProcessing stepscanbeperformedbeforethefragmentshader:
Thepixelownershiptest
Thescissortest
Thestenciltest
Thedepthtest
Occlusionqueryupdating
NotethatwithOpenGL4.2 or ARB_shader_image_load_store,thepixelownershipandscissortestswill always beperformedearly.
片元着色器的輸入
片元着色器的輸入是早期固定管線系統輸入及圖元表面的插值。
1.系統輸入
inboolgl_FrontFacing; //雙面光照
invec2gl_PointCoord;
invec4gl_FragCoord;//這個輸入有用的多,多用在後處理。
gl_FragCoord在片元着色器階段很有用,x,y是窗口空間的值,單位是像素。
如果用戶沒有寫入gl_FragDepth,z值將被寫入, gl_FragCoord是 1/Wclip,Wclip透視除法其值是 VclipCoord=PVM_matrix*Vertex的w值。
裁剪空間座標直接用乘上gl_FragCoord.w即做了透視除法了。
OpenGL4.0加入的 gl_SampleID,gl_SamplePosition,gl_SampleMaskIn。
-------------------------------------------------------------------------------
gl_ClipDistance,gl_PrimitiveID
OpenGL4.3加入的
gl_Layer,gl_ViewportIndex。
2.頂點着色器階段的輸入
out出的各種屬性值。
片元着色器輸出
用戶自定義輸出,只能是浮點數floats,整數integers,和向量vectors,相同類型可以成組輸出,不能輸出接口塊 interfaceblocks。
有三種方法可以將輸出變量與顏色號關聯起來:
1.在着色器中指定 In-shaderspecification
layout(location=3)outvec4diffuseColor;
2.在shader鏈接前指定 Pre-linkspecification
glBindFragDataLocation(GLuint program,GLuint colorNumber,constchar* name);
3.系統自動設置 Automaticassignment
正如頂點屬性輸入一樣,顏色輸出的索引號也是連續的,自動分配輸出並不是什麼好主意,不同的片元着色器,即使輸出名字相同,分配的輸出也可能不同,你每次都需要驗證其有效性。
1.在着色器中控制 gl_FragDepth輸出值。
GLSL4.20 or ARB_conservative_depth 定義輸出值
其它輸出
layout(depth_
OpenGL
發表評論
登录
所有評論
還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布.
相關文章
OpenGL固定管線設置投影矩陣
0.前言
OpenGL如果沒有設置投影矩陣,默認使用一個座標範圍在[-1.0,1.0]的正交投影。
如果使用固定管線編程時要切換投影矩陣,步驟如下:
//切換當前矩陣爲投影矩陣
glMatrixMode(GL_PROJECTION);
/
龚建波
2020-07-0614:13:21
LearnGL-08.0.1-Camera-GLM版前置篇
文章目錄GLM簡單介紹Git倉庫使用References
LearnGL-學習筆記目錄
本人才疏學淺,如有什麼錯誤,望不吝指出。
上一篇:LearnGL-08-Camera-linmath.h版,瞭解Open
linjf520
2020-07-0610:29:15
Android環境下OpenGLES的學習
寫在前面:我也是OpenGL的初學者,本篇是作爲一個學習筆記來寫的。
首先學習一下關於OpenGL中的重要概念:矩陣
你做了一個物體想放在空間某一個座標上,需要一個World矩陣吧?然後你需要一個攝像機來拍攝這個物體,讓這個物體可見,對吧
w366549434
2020-07-0800:22:28
VS2010Meshlab編譯
VS2010Meshlab編譯
因項目組需要,最近需要編譯一下Meshlab,爲了日後做功能抽取和擴展做準備,在meshlab的基礎上,環
懂deeee珍惜
2020-07-0723:19:57
OpenGL4.3(CoreProfile)-5.3PropagatingChangestoObjects
Objectsthatmaybesharedbetweencontextsincludebufferobjects,program
andshaderobjects,renderbufferobjects,s
lhy_ps6
2020-07-0722:25:37
OpenGL入門--環境搭建
OpenGL入門--環境搭建準備資源搭建OpenGL環境
上一篇介紹一下OpenGL的專業名詞的相關知識,本篇來詳細的記錄一下OpenGL的環境搭建,以及OpenGL中的“HelloWord”。
準備資源
搭建環境,需要
亮亮不想说话
2020-07-0715:39:00
OpenGL學習五——繪製幾何體
1、基本圖元
OpenGL中幾何圖元包括點、直線以及多邊形,其中多邊形特指簡單凸多邊形。
它們都是用頂點集合來描述的,要指定定點可以使用函數glVertex*()。
繪製幾何圖元時,需要在glBegin和glEnd的
Ocean2006
2020-07-0712:53:01
OpenGL字體的另一種實現---學習NeHeOpenGL
爲了提醒自己,先寫個標題.....正文後續補上
Hefee
2020-07-0712:34:55
LearnOpenGLES:正交變換
上一節中,我們遺留了一個Android適配的問題。
這個問題表現爲我們創建的物體長寬比例如果與屏幕寬高比不一致的畫,會被屏幕拉伸。
爲什麼會拉伸?
首先我們來認識齊次座標 ,
這個就是一個齊次座標,其中x,y,z分別表示世
漫少
2020-07-0710:29:56
[OpenGL][原創]無法解析的外部符號_gladLoadGLLoader,_glad_glViewport該符號在函數_main中被引用解決方法
本以爲這個錯誤很容易解決,發現網上很多就是將glad.c添加到項目解決了,但是我加入後還是報錯提示
錯誤 1 errorC1853:“Debug\ConsoleApplication2.pch”預編譯頭文件來自編譯器的早期
FL1623863129
2020-07-0704:49:30
glColor3f函數顏色
原文來自CSDN http://blog.csdn.net/jcy8126/article/details/8241097
glColor3f函數OpenGL顏色
[cpp] view
plaincopy
<
sherry_0009
2020-07-0702:33:02
opengl的PIXELFORMATDESCRIPTOR
原文轉自 http://hi.baidu.com/beyoar/item/4a74a89c26b80ede1f4271b6
表述像素格式:PIXELFORMATDESCRIPTOR
在OpenGL對窗口渲染之前,必須根據渲染需
sherry_0009
2020-07-0702:33:02
glBegin
原文來自百度百科 http://baike.baidu.com/view/1280542.htm
glBegin是OpenGL裏使用的函數。
而OpenGL是一種高性能圖形算法行業標準,是行業領域中最爲廣泛接納的
2D/3D圖形AP
sherry_0009
2020-07-0702:33:02
角度離散法畫畫弧和橢圓
角度離散法可以利用已有的直線算法來分段繪製圓弧、橢圓弧。
這種方法的優點在於可以自由控制所繪製的弧的角度範圍。
完整代碼:
#include
延伸文章資訊
- 1LearnOpenGL - Depth Testing
The gl_FragCoord variable also contains a z-component which contains the depth ... The depth test...
- 2Getting the real fragment depth in GLSL - Game Development ...
Alternatively, you can get it recover it from gl_FragCoord... In a fragment shader, gl_FragCoord ...
- 3OpenGL 片元着色及輸出 - 台部落
gl_FragCoord 在片元着色器階段很有用, x, y 是窗口空間的值,單位是像素。如果用戶沒有寫入gl_FragDepth, z 值將被寫入, gl_FragCoord 是 1/Wcli...
- 4OpenGL Insights - 第 552 頁 - Google 圖書結果
gl_FragCoord = gl_Position; Listing 39.1. ... In the pixel shader, the z-value is multiplied by 1...
- 5WebGL2 Fog
In between 0 and 1 you get a percentage of both colors. You could implement mix yourself like ......