亚洲香蕉成人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
麻豆成人在线看| 日韩av毛片网| 国产成人精品综合久久久| 最近中文字幕mv在线一区二区三区四区| 欧美精品久久久久久久久久| 啪一啪鲁一鲁2019在线视频| 日本伊人精品一区二区三区介绍| 91中文在线视频| 亚洲日韩欧美视频| 狠狠做深爱婷婷久久综合一区| 国产精品丝袜视频| 日韩三级影视基地| 亚洲专区在线视频| 久久国产精品久久久久久| 国产99在线|中文| 色综合影院在线| 国产精品成人免费视频| 国产精品美女免费看| 精品国内亚洲在观看18黄| 成人欧美一区二区三区在线| 国产精品99久久久久久www| 亚洲大胆人体在线| 日韩欧美国产中文字幕| 国产欧美精品xxxx另类| 91伊人影院在线播放| 国产精品第七影院| 欧美性xxxxxxxxx| 亚洲天堂色网站| 伊人精品在线观看| 亚洲有声小说3d| 午夜精品在线视频| 亚洲美女久久久| 日韩精品久久久久| 日本电影亚洲天堂| 影音先锋日韩有码| 97视频免费观看| 成人av在线网址| 久久久久久九九九| 久久久黄色av| 亚洲欧美中文在线视频| yw.139尤物在线精品视频| 欧美性猛交xxxx免费看漫画| 久久国产加勒比精品无码| 欧美亚洲激情在线| 国产精品激情自拍| 日韩三级影视基地| 欧美电影院免费观看| 亚洲最大av在线| 国产偷亚洲偷欧美偷精品| 日韩欧美精品中文字幕| 久久中文精品视频| 在线观看日韩专区| 亚洲aⅴ日韩av电影在线观看| 久久久久久噜噜噜久久久精品| 538国产精品一区二区在线| 国产精品美女999| 亚洲第一区中文99精品| 一本色道久久综合狠狠躁篇的优点| 国产成人一区二区在线| 一区二区三区动漫| 91在线观看欧美日韩| 黑人欧美xxxx| 亚洲欧美自拍一区| 国产一区二区欧美日韩| 97在线视频观看| 国产精品夜间视频香蕉| 国产精品老女人视频| 91在线观看免费高清完整版在线观看| 亚洲视频综合网| 成人精品视频99在线观看免费| 亚洲图片在区色| 欧美黑人性猛交| 亚洲欧美另类中文字幕| 一区二区三区日韩在线| 色综合视频一区中文字幕| 精品久久中文字幕久久av| 色噜噜亚洲精品中文字幕| 日韩一区二区三区在线播放| 亚洲精品福利视频| 国产精自产拍久久久久久蜜| 亚洲影影院av| 欧美中文在线观看国产| 国产成人亚洲综合青青| 亚洲自拍欧美色图| 亚洲91精品在线| 亚洲国产精品高清久久久| 日韩亚洲综合在线| 亚洲国产古装精品网站| 亚洲91精品在线| 欧美电影在线观看完整版| 色视频www在线播放国产成人| 懂色av一区二区三区| 国产精品一区专区欧美日韩| 在线观看国产精品日韩av| 精品中文视频在线| 亚洲欧美日韩视频一区| 日韩精品在线免费观看| 久久久国产精彩视频美女艺术照福利| 中文字幕在线国产精品| 久久久精品影院| 国产aⅴ夜夜欢一区二区三区| 国产亚洲人成a一在线v站| 91久久精品久久国产性色也91| 免费91麻豆精品国产自产在线观看| www.日本久久久久com.| 91国产高清在线| 久久精品国产一区二区三区| 亚洲一区二区三区四区在线播放| 人妖精品videosex性欧美| 日韩av电影在线网| 国产精品九九久久久久久久| 久久国产精品久久久久久久久久| 亚洲精品在线观看www| 欧美xxxx做受欧美| 欧美裸体男粗大视频在线观看| 欧美肥老太性生活视频| 日韩精品免费在线视频| 一本色道久久88综合亚洲精品ⅰ| 久久免费福利视频| 国产激情久久久久| 精品国产91久久久久久老师| 日韩欧美一区二区在线| 性色av一区二区三区免费| 国产精品天天狠天天看| 精品国产一区二区三区久久| 亚洲精品国产免费| 亚洲自拍高清视频网站| 中文字幕精品www乱入免费视频| 日韩欧美国产激情| 欧美精品亚州精品| 亚洲最大的免费| 欧美成人h版在线观看| 国产一区二区色| 成人写真福利网| 亚洲视频欧洲视频| 日韩av网站导航| 国产成人福利夜色影视| 91精品国产99久久久久久| 国产伦精品免费视频| 国产精品99久久久久久人| 亚洲精品电影网在线观看| 国产在线观看精品一区二区三区| 亚洲成人教育av| 久久91亚洲人成电影网站| 亚洲成人性视频| 国产精品一区二区三区免费视频| 在线亚洲欧美视频| 97精品一区二区三区| 精品久久久久久久久久国产| 成人免费黄色网| 久久久www成人免费精品张筱雨| 欧美特级www| 成人免费在线视频网址| 日韩av在线免费观看一区| 欧美大片欧美激情性色a∨久久| 一区二区三区无码高清视频| 精品成人av一区| 成人h猎奇视频网站| 成人亚洲欧美一区二区三区| 欧美多人乱p欧美4p久久| 亚洲精品国产精品国自产观看浪潮| 国产精品成人一区| 亚洲欧洲xxxx| 91日本在线视频|