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

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

OpenGL的渲染流程梳理

2019-11-09 18:30:22
字體:
來源:轉載
供稿:網友

渲染可以拆分為多個步驟(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
亚洲视频在线观看网站| 91九色视频在线| www高清在线视频日韩欧美| 欧美日韩成人在线视频| 亚洲另类欧美自拍| 亚洲国产女人aaa毛片在线| 欧美黄色三级网站| 精品国内自产拍在线观看| 亚洲精品一区二区在线| 亚洲精品午夜精品| 亚洲欧美精品一区| 亚洲电影成人av99爱色| 国产激情视频一区| 久久久www成人免费精品| 一区三区二区视频| 日本中文字幕不卡免费| 亚洲欧美制服综合另类| 色综合亚洲精品激情狠狠| 最近免费中文字幕视频2019| 久久精品亚洲热| 国产精品久久久av| 亚洲91精品在线| 亚洲片在线观看| 国产精品视频一区二区三区四| 亚洲成人av中文字幕| 国产精品高精视频免费| 亚洲精选在线观看| 成人写真福利网| 国产91精品最新在线播放| 国产女人18毛片水18精品| 中文字幕一区二区三区电影| 精品自在线视频| 国产精品国产三级国产专播精品人| 国产成人精品亚洲精品| 91啪国产在线| 欧美尤物巨大精品爽| 全球成人中文在线| 欧美午夜xxx| 国产精品偷伦免费视频观看的| 色哟哟入口国产精品| 国产精品麻豆va在线播放| 欧美亚洲成人网| 精品久久久久久久久久久久久久| 日韩免费av片在线观看| 国产日韩欧美91| 日韩激情av在线免费观看| 国内精品小视频在线观看| 精品国产区一区二区三区在线观看| 91欧美激情另类亚洲| 91精品免费看| 久久不射电影网| 欧美精品免费在线观看| www.亚洲男人天堂| 欧美激情中文字幕在线| 久久久精品日本| 韩国三级日本三级少妇99| 国产精品一久久香蕉国产线看观看| 国产精品旅馆在线| 国产精品视频中文字幕91| 成人激情免费在线| 亚洲综合社区网| 51久久精品夜色国产麻豆| 久久亚洲一区二区三区四区五区高| 尤物99国产成人精品视频| 国产精品激情av电影在线观看| 一区二区欧美在线| 欧美成人精品在线| 亚洲精品自拍视频| 成人精品视频99在线观看免费| 91久久嫩草影院一区二区| 午夜精品99久久免费| 亚洲视频在线观看| 欧美一级免费视频| 国产一区二区三区三区在线观看| 久久精品一偷一偷国产| 国产精品国内视频| 亚洲变态欧美另类捆绑| 丁香五六月婷婷久久激情| 国内精品伊人久久| 68精品久久久久久欧美| 亚洲欧洲日产国码av系列天堂| 久久久久久中文| 亚洲精选在线观看| 亚洲人成在线免费观看| 亚洲视频免费一区| 欧美日韩国产在线播放| 亚洲免费视频在线观看| 国产精品成人v| 一区二区欧美久久| 久久久久久久久久久91| 91久久在线播放| 深夜成人在线观看| 亚洲欧美中文在线视频| 日本韩国在线不卡| 久久久久久久成人| 国产精品视频xxxx| 97精品一区二区三区| 国产手机视频精品| 国产精品免费一区二区三区都可以| 久久亚洲影音av资源网| 久久6精品影院| 日韩av中文字幕在线播放| 欧美高清激情视频| 精品中文字幕视频| 亚洲新中文字幕| 日韩一区在线视频| 91成人在线视频| 91在线网站视频| 精品一区二区三区三区| 精品美女久久久久久免费| 国产精品电影在线观看| 亚洲性视频网站| 日本视频久久久| 久久噜噜噜精品国产亚洲综合| 欧美日韩另类字幕中文| 亚洲xxx视频| 97久久久久久| 国产精品∨欧美精品v日韩精品| 欧美色另类天堂2015| 久久精品在线视频| 久久韩国免费视频| 国产欧美日韩中文字幕| 国产成人91久久精品| 欧美日本精品在线| 亚洲一区二区国产| 日韩在线观看免费| 日韩成人在线视频| 国产一区二区三区在线免费观看| 国产日韩欧美在线视频观看| 尤物yw午夜国产精品视频明星| 91美女片黄在线观看游戏| 91在线观看免费高清完整版在线观看| 国产精品视频26uuu| 主播福利视频一区| 欧美激情一区二区三区高清视频| 日韩在线视频免费观看高清中文| 亚洲精美色品网站| 久久国产精品免费视频| 久久久精品国产亚洲| 国产精品视频不卡| 亚洲欧美国产日韩天堂区| 亚洲国产成人久久综合| 国产精品久久久久久久7电影| 视频在线一区二区| 性欧美办公室18xxxxhd| 亚洲成人av在线| 欧美一区三区三区高中清蜜桃| 美乳少妇欧美精品| 国产精品综合网站| 欧美亚洲视频在线看网址| 欧美俄罗斯性视频| 亚洲精品日韩在线| 精品高清美女精品国产区| 国产激情久久久| 国模精品一区二区三区色天香| 免费av在线一区| 亚洲精品一区中文字幕乱码| 久久久国产一区| 国产91久久婷婷一区二区| 精品视频在线播放色网色视频| 欧美性生交xxxxx久久久| 日韩亚洲一区二区| 精品国产欧美一区二区三区成人| 日韩视频在线免费观看|