OpenGL 片元着色及輸出 - 台部落

文章推薦指數: 80 %
投票人數:10人

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_)outfloatgl_FragDepth; any Thedefault.Youmayfreelychangethedepth,butyoulosethemostpotentialperformance. greater Youwillonlymakethedepth larger,comparedto gl_FragCoord.z. less Youwillonlymakethedepth smaller,comparedto gl_FragCoord.z. unchanged Ifyouwriteto gl_FragDepth,youwillwriteexactly gl_FragCoord.z. 2.GLSL4.00 or ARB_sample_shading 定義多重採樣掩碼: outintgl_SampleMask[]; gl_SampleMask   MRTT示例  首先指定輸出緩存: constGLenumbuffers[]={GL_COLOR_ATTACHMENT4,GL_COLOR_ATTACHMENT2,GL_NONE,GL_COLOR_ATTACHMENT0}; glDrawBuffers(4,buffers); 其次,在shader中關聯輸出位置location及定義輸出格式int,vec3,vec4...: layout(location=1)outintmaterialID; layout(location=4)outvec3normal; layout(location=0)outvec4diffuseColor; layout(location=3)outvec3position; layout(location=2)outvec4specularColor; Outputname Colorattachment materialID GL_COLOR_ATTACHMENT2 normal GL_NONE diffuseColor GL_COLOR_ATTACHMENT4 position GL_COLOR_ATTACHMENT0 specularColor GL_NONE 當指定的索引號超出範圍時,輸出無效GL_NONE。

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 #include #include



請為這篇文章評分?