亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

OpenGL的渲染流程梳理

2019-11-09 19:03:37
字體:
來源:轉載
供稿:網友

渲染可以拆分為多個步驟(stage),拆分之后,就可以使用管道(pipeline)來優化執行效率。打個比方,過安檢的時候,至少有三個步驟,把包放在傳送帶上,然后走過去,取回傳送帶上的包。在排隊過安檢的過程中,排在后面的旅客并不需要等前面的旅客完成,只要前面的旅客把包放上傳送帶(完成第一個步驟),后面的旅客就可以接著把包放在傳送帶,這就是管道原理。

Step1 準備頂點數據(vertex specification)。對于現在使用硬件加速的渲染技術,這個步驟是在CPU上完成的。如果要渲染一個三角形,這一步需要幾個信息:三個點的位置和頂點顏色、以及繪制對象:“三角形”。

以下這段代碼是個人隨手而寫,并非真的OpenGL代碼,只是用來描述Step1。

var glState = OpenGLState.getInstance();var arrbuf = new ArrayBuffer();//new a array buffer to store the data//vertex positionarrbuf.push({0, 1});arrbuf.push({-0.5, 0});arrbuf.push({0.5, 1});//vertex colorarrbuf.push({255, 0, 0});arrbuf.push({0, 255, 0});arrbuf.push({0, 0, 255});var vertextArr = new VertexArray(arrbuf);vertextArr.setAttr1(0, 2);//attr1 for positionvertextArr.setAttr1(3, 5);//attr2 for colorglState.vertextArr = vertextArr;var vertextShader = new Shader("your vertex shader code");glState.vertextShader = vertextShader;var fragShader = new Shader("your fragShader");glState.fragShader = fragShader;// other Operation to configure glStateglState.run();// the run call will trigger the gl render stages blow

Step2 處理頂點(vertex PRocessing),根據每個頂點的數據(在前一步指定了),以及一些常量(uniform)(在前一步指定了),進行一次分析處理,例如,是否需要對每個頂點的位置做一次位置的變換(transform)(在3D渲染中,變換非常重要)。在可編程(programmable)的渲染管道中,頂點處理可以細分為三個可編程的步驟,第一個小步驟的指令可以vertext shader來指定,第二個小步驟叫tessellation,又可以再細化3個步驟,由2個shader加上一個內置的程序(fixed-function)來控制,第三個步驟由geometry shader來控制,第一個步驟是必須的,后兩個步驟是可選的。

Step3 頂點的后續處理(vertex post-processing),上一個步驟產生的所有頂點信息,會在這里進一步處理。這個步驟是不可以編程的,所以沒有相應的shader,但是可以配置。通過配置,可以實現transform feedback,前一個步驟處理完產生的數據,可以在這一步反饋回CPU。如果不需要繪制到屏幕上,這個步驟可以中斷。如果不中斷,則會進行裁剪(clipping),打個比方,原先的三角形,如果有個點不再可視范圍內,那么這個三角形會被處理成2個三角形,增加2個在可視邊界上的頂點。根據可配置的viewport提供的信息,對頂點的位置投影(projection)到一個平面(window space)上,要么做透視處理(perspective),要么做正交處理(orthographic)。

Step4 對繪制對象的整合(primitive assembly),將前面產生的頂點,根據第一個步驟指定的繪制對象信息,打包成一個個的assembly,然后交給下一個步驟處理。如果第二個步驟中需要進行tessellating,或者需要執行geometry shader,那么在vertex shader之后,也會緊接著完成一個簡單的”繪制對象整合”。

Step5 進行光柵化處理(rasterization),管道里會有一個不可編程的程序稱為rasterizer。所謂光柵化,就是根據頂點的位置信息,加上分辨率信息,對渲染對象所在的一個包圍盒里(包含繪制對象的最小的一個像素矩陣表),凡是判斷到像素格子受到影響,就會生成一個fragment信息。這個fragment信息不一定是整個像素格子。

Step6 可編程的并且可選的(optional)步驟,交由fragment shader來處理。這個步驟的結果是將顏色、深度等信息輸出,也可以輸出自定義信息。當涉及的多重采樣(MSAA),一般情況,shader只會針對每個fragment執行一次。但如果在shader中,使用了gl_SampleID,則shader會針對每個采樣執行一次。

Step7 對fragment shader的輸出進行最后的處理(per-sample processing)。這一步會判斷fragment shader的輸出是否有效,如果無效則忽略,最后會將最終的顏色寫入framebuffer,或者跟framebuffer相應位置的顏色進行混合(blend)。其中,判斷輸出是否有效那些子步驟,在新的OpenGL版本中,可以提前到fragment shader處理之前,這種情況的輸入是來自rasterizer。

參考 [1] Rendering Pipeline Overview


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品少妇videofree| 狠狠色香婷婷久久亚洲精品| 九九热最新视频//这里只有精品| 欧美高清性猛交| 日本午夜精品理论片a级appf发布| 久久最新资源网| 欧美日韩国产一区二区三区| 国模叶桐国产精品一区| 91沈先生作品| 欧美视频免费在线观看| 国产精品国产自产拍高清av水多| 亚洲国产精品99| 一区二区国产精品视频| 亚洲精品免费一区二区三区| 在线观看国产欧美| 亚洲欧美在线一区二区| 91a在线视频| 日韩电影免费在线观看| 欧美自拍大量在线观看| 欧美理论电影网| 亚洲精品电影在线观看| 国产成人久久久| 日本国产精品视频| 亚洲成年人影院在线| 国产九九精品视频| 91在线高清视频| 久久久国产精彩视频美女艺术照福利| 亚洲国产欧美一区二区丝袜黑人| 国产精品国产福利国产秒拍| 欧美精品一区三区| 一区二区三区回区在观看免费视频| 欧美精品在线看| 在线丨暗呦小u女国产精品| 亚洲视频精品在线| 久久久久一本一区二区青青蜜月| 91精品久久久久久久| 成人性教育视频在线观看| 91网在线免费观看| 午夜精品久久久久久久久久久久久| 97精品国产97久久久久久免费| 国精产品一区一区三区有限在线| 久久精品电影网站| 欧美成人免费小视频| 日韩精品在线观看一区| 久久在线免费观看视频| 欧美最猛性xxxx| 在线精品国产欧美| 亚洲天堂成人在线| 国产成+人+综合+亚洲欧洲| 粉嫩av一区二区三区免费野| 国产精品人成电影在线观看| 在线成人免费网站| 亚洲欧美日韩成人| 国产亚洲欧美一区| 欧美成人sm免费视频| 亚洲乱亚洲乱妇无码| 久久91亚洲精品中文字幕奶水| 欧美精品激情视频| 按摩亚洲人久久| 欧美日韩精品在线观看| 国产91精品不卡视频| 一道本无吗dⅴd在线播放一区| 日韩精品视频三区| 亚洲国产欧美一区二区丝袜黑人| 国产欧美婷婷中文| 欧美日韩亚洲精品内裤| 俺去亚洲欧洲欧美日韩| 国产精品久久久久久av| 97超级碰碰碰久久久| 久久久久久97| 大荫蒂欧美视频另类xxxx| 国产女同一区二区| 国产美女直播视频一区| 国产精品国产福利国产秒拍| 91av免费观看91av精品在线| 最近2019免费中文字幕视频三| 久热爱精品视频线路一| 人人做人人澡人人爽欧美| 日韩免费在线看| 国产成人精品视频在线| 色午夜这里只有精品| 精品女同一区二区三区在线播放| 91久久精品美女| 日本高清久久天堂| 亚洲一区999| 久久久久久国产精品久久| 18久久久久久| 国产九九精品视频| 国产一区二区三区在线播放免费观看| 精品久久久久久久久中文字幕| 久久久999国产| 亚洲理论片在线观看| 成人免费网视频| 久久视频在线看| 欧美日韩国产精品一区二区不卡中文| 尤物九九久久国产精品的特点| 欧美中文字幕在线视频| 成人精品网站在线观看| 欧美丰满少妇xxxxx| 欧美性色视频在线| 国产精品视频免费观看www| 91免费人成网站在线观看18| 国产噜噜噜噜噜久久久久久久久| 日韩av在线网| 亚洲精品福利资源站| 中文字幕一区日韩电影| 欧美视频裸体精品| 亚洲成人999| 日韩中文字幕在线精品| 国产精自产拍久久久久久| 亚洲成人久久久久| 欧美丰满片xxx777| 日韩视频在线免费观看| 欧美日韩国产成人在线| 欧美大成色www永久网站婷| 亚洲精品456在线播放狼人| 久久最新资源网| 国产精品入口尤物| 97视频com| 欧美性受xxxx白人性爽| 91精品久久久久久久| 中文字幕国产亚洲2019| 一本色道久久综合亚洲精品小说| 久久成人精品视频| 91夜夜未满十八勿入爽爽影院| 青草青草久热精品视频在线观看| 欧美激情va永久在线播放| 亚洲在线免费看| 亚洲午夜女主播在线直播| 日韩成人久久久| 国内精品免费午夜毛片| 欧美在线视频观看| 最好看的2019年中文视频| www.午夜精品| 精品久久久久久久久久国产| 亚洲免费伊人电影在线观看av| 亚洲精品98久久久久久中文字幕| 久久久噜噜噜久久久| 国产精品一二区| 欧洲成人免费aa| 中文字幕自拍vr一区二区三区| 92国产精品视频| 欧美色道久久88综合亚洲精品| 91久久综合亚洲鲁鲁五月天| 在线视频亚洲欧美| 欧美精品电影免费在线观看| 日韩专区在线播放| 欧美在线观看视频| 日韩欧亚中文在线| 中文字幕免费国产精品| 青青草国产精品一区二区| 孩xxxx性bbbb欧美| 亚洲国产成人91精品| 国产午夜精品全部视频在线播放| 亚洲aaa激情| 精品国产电影一区| 亚洲精品日韩激情在线电影| 国产精品色视频| 欧美高清第一页| 久久99久久99精品免观看粉嫩| 成人黄色网免费| xxav国产精品美女主播| 日韩欧美在线视频| 日韩精品久久久久久福利|