欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

通過OpenGL理解前端渲染原理(1)

一、OpenGL

OpenGL,是一套繪制3D圖形的API,當(dāng)然它也可以用來繪制2D的物體。OpenGL有一大套可以用來操作模型和圖片的函數(shù),通常編寫OpenGL庫的人是顯卡的制造者。我們買的顯卡都支持特定版本的OpenGL。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、惠安ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的惠安網(wǎng)站制作公司

下圖是用OpenGL做的旋轉(zhuǎn)的立方體。

通過OpenGL理解前端渲染原理(1)

二、渲染原理

2.1 渲染管道

在OpenGL中,所有東西都在一個(gè)3D的空間里,而我們的屏幕和窗口都是2D的,所以O(shè)penGL需要將3D的坐標(biāo)轉(zhuǎn)換成2D的坐標(biāo),做這件事的是OpenGL中的渲染管道(graphics pipeline)。

渲染管道可以分成兩大部分:第一部分將3D坐標(biāo)轉(zhuǎn)換成2D坐標(biāo);第二部分把2D的坐標(biāo)轉(zhuǎn)換成實(shí)際的像素。

2.2 著色器

通常來說,渲染管道把一組3D坐標(biāo)轉(zhuǎn)換成屏幕上帶有顏色的2D像素需要經(jīng)過很多步。上一步的輸出作為下一步的輸入,所有步驟都是高度專一的,每步都有一個(gè)特定的函數(shù),且可以很容易地并發(fā)執(zhí)行。顯卡有數(shù)千個(gè)處理核心來快速處理渲染管道中的數(shù)據(jù),而這些是在每個(gè)步驟中通過運(yùn)行在GPU上的多個(gè)小程序來處理的,這些小的程序被稱之為程序著色器(shader)。

其中的一些著色器是可以配置的,開發(fā)者可以根據(jù)需求配置自己的著色器去替代已經(jīng)存在的那些,這就讓我們能夠更自由和細(xì)粒度地控制渲染的過程。同時(shí),因?yàn)樗鼈冞\(yùn)行在GPU上,又給我們保留了珍貴的GPU時(shí)間,在平時(shí)的開發(fā)中,我們也要充分利用GPU渲染來提高軟件性能。

著色器通常使用GLSL來寫,全稱是OpenGL Shading Language。

2.3 舉個(gè)例子

下圖展示了一個(gè)抽象的渲染管線中的步驟,其中藍(lán)色部分是我們可以注入自己的著色器。

通過OpenGL理解前端渲染原理(1)

通過上圖我們發(fā)現(xiàn),要把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換成全渲染的像素要經(jīng)過很多步,接下來我們對每一個(gè)步驟和代碼進(jìn)行簡單的解釋。

我們在渲染管線中傳入一組可以組成三角形的3D坐標(biāo)數(shù)據(jù),這組數(shù)據(jù)即頂點(diǎn)數(shù)據(jù)。頂點(diǎn)數(shù)據(jù)是頂點(diǎn)的集合,而一個(gè)頂點(diǎn)是一個(gè)3D坐標(biāo)的集合。

渲染管線的第一步是頂點(diǎn)著色器(Vertex Shader)。我們這里傳入的是一個(gè)簡單的頂點(diǎn),頂點(diǎn)著色器可以讓我們做一些基礎(chǔ)的處理操作,比如頂點(diǎn)的屬性。

在初始裝配階段,也就是Shape Assembly階段,從頂點(diǎn)著色器中輸出的頂點(diǎn)會形成一個(gè)原始的形狀。本例中,輸出的頂點(diǎn)形成的是一個(gè)三角形。

從初始裝配階段到geometry shader階段,我們可以通過發(fā)散其他頂點(diǎn)來形成新的圖形,本例中形成了第二個(gè)三角形。

在Tessellation Shader階段,可以把上一階段給出的原型圖再分割成若干個(gè)小的原型圖。本例中,可以形成更多的三角形來創(chuàng)造一個(gè)更加平坦、順滑的環(huán)境。這么說可能難以理解,我們結(jié)合下圖來進(jìn)一步闡述,這就是細(xì)分曲面著色器的作用。

通過OpenGL理解前端渲染原理(1)

細(xì)分曲面著色器的下一階段是光柵化階段(Rasterzation stage),在這一階段會對最終的原型和呈現(xiàn)在屏幕上的對應(yīng)像素做一個(gè)映射,形成fragment,供下一階段的fragment shader使用。

Fragment shader最主要的使命是計(jì)算出一個(gè)像素的最終顏色,在這個(gè)階段我們可以使用OpenGL中一些高級的特效。通常fragment shader會包含3D界面的多個(gè)數(shù)據(jù),包括燈光、陰影、顏色等等。

當(dāng)所有對應(yīng)的顏色都確定以后,最終的原型將會被傳入最后一個(gè)步驟,我們稱之為Alpha test and blending階段。這個(gè)階段會判斷相應(yīng)的深度,比如一個(gè)物體可能在另一個(gè)物體的后面,那它可能采用其他的顏色;或者如果該物體被遮擋,可能會被裁掉。

如上文所述,我們可以看到整個(gè)渲染管線的步驟和邏輯是十分復(fù)雜的,這其中包含了很多個(gè)可以改變的步驟,但我們一般只操作Vertex Shader 和 fragment shader,其他的著色器我們會直接采用默認(rèn)的。在實(shí)際的OpenGL編程中,我們至少需要定義一個(gè)Vertex Shader和Fragment shader。(需要說明的是,OpenGL 3.1之前的版本包含了固定管線,從3.1版本開始,固定管線從核心中刪掉了,因此我們必須使用著色器去工作)。

三、總結(jié)

本文為該系列文章的第一篇,先簡單介紹OpenGL的一些原理,后續(xù)文章中會添加新的代碼分析,包括著色器(Shader)、紋理(Textture)、變形(transformation)、坐標(biāo)系統(tǒng)(Coordinate systems)、相機(jī)(Camera)等。

作者:崔曉迪

來源:宜信技術(shù)學(xué)院

標(biāo)題名稱:通過OpenGL理解前端渲染原理(1)
網(wǎng)站地址:http://aaarwkj.com/article26/jjhgjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、微信小程序、網(wǎng)站排名移動(dòng)網(wǎng)站建設(shè)、用戶體驗(yàn)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
在线视频天堂亚洲天堂| 中文字幕二区三区人妻| 欧洲精品久久久久久| 久久综合久久狠狠激情| 妇女自拍偷自拍亚洲精品| 精品啪在线观看国产熟女| 国产亚洲一区激情小说| 国产经典三级在线观看| 在线看黄色片播放器日韩| 国产亚洲高清一区二区| 自拍偷拍亚洲丝袜大秀| 亚洲成av人亚洲av| 国产精品白嫩初高中害羞小美女| 欧美日韩性视频播放器| 熟女人妻视频一区二区| 人妻勾引中文字幕在线视频| 狼人综合狼人综合网站| 五月开心婷婷开心五月活动推荐| 精品成人在线一区二区| 国产一区二区三区婷婷 | 国产二区日韩成人精品| 欧美在线日韩一区二区| 国产亚洲一区二区高清| 97在线视频这里只有精品| 91成人大片在线观看| 日韩商清av毛片网站| 国产日韩欧美亚洲中文国| 国产在线视频不卡福利片| 精品国产乱码一区二区三区| 亚洲精品第一国产综合| 亚洲天堂精品日韩电影| 精品国产一区二区成人| 日韩在线不卡免费视频一区| 久章草在线免费视频播放| 欧美日韩亚洲精品内裤| 欧美αv一区二区三区| 国产精品国产三级丝袜| 日韩中文字幕视频一区| 久久亚洲中文字幕精品熟女一区| 亚洲男人天堂av电影| 丰满熟妇久久人妻同堂av|