偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

前端 四種渲染技術(shù)的計算機理論基礎(chǔ)

開發(fā) 前端
前端可用的渲染技術(shù)有 html + css、canvas、svg、webgl,我們會綜合運用這些技術(shù)來繪制頁面。有沒有想過這些技術(shù)有什么區(qū)別和聯(lián)系,它們和圖形學有什么關(guān)系呢?

[[440188]]

本文轉(zhuǎn)載自微信公眾號「神光的編程秘籍」,作者神說要有光zxg  。轉(zhuǎn)載本文請聯(lián)系神光的編程秘籍公眾號。

前端可用的渲染技術(shù)有 html + css、canvas、svg、webgl,我們會綜合運用這些技術(shù)來繪制頁面。有沒有想過這些技術(shù)有什么區(qū)別和聯(lián)系,它們和圖形學有什么關(guān)系呢?

本文我們就來談一下網(wǎng)頁渲染技術(shù)的計算機理論基礎(chǔ)。

渲染的理論基礎(chǔ)

人眼的視網(wǎng)膜有視覺暫留機制,也就是看到的圖像會繼續(xù)保留 0.1s 左右,圖形界面就是根據(jù)這個原理來設(shè)計的一幀一幀刷新的機制,要保證 1s 至少要渲染 10 幀,這樣人眼看到畫面才是連續(xù)的。

每幀顯示的都是圖像,它是由像素組成的,是顯示的基本單位。不同顯示器實現(xiàn)像素的原理不同。

我們要繪制的目標是矩形、圓形、橢圓、曲線等各種圖形,繪制完之后要把它們轉(zhuǎn)成圖像。圖形的繪制有一系列的理論,比如貝塞爾曲線是畫曲線的理論。圖形轉(zhuǎn)圖像的過程叫做光柵化。這些圖形的繪制和光柵化的過程,都是圖形學研究的內(nèi)容。

圖形可能做縮放、平移、旋轉(zhuǎn)等變化,這些是通過矩陣計算來實現(xiàn)的,也是圖形學的內(nèi)容。

除了 2D 的圖形外,還要繪制 3D 的圖形。3D 的原理是把一個個三維坐標的頂點連起來,構(gòu)成一個一個三角形,這是造型的過程。之后再把每一個三角形的面貼上圖,叫做紋理。這樣組成的就是一個 3D 圖形,也叫 3D 模型。

3D 圖形也同樣需要經(jīng)歷光柵化變成二維的圖像,然后顯示出來。這種三維圖形的光柵化需要找一個角度去觀察,就像拍照一樣,所以一般把這個概念叫做相機。

同時,為了 3D 圖形更真實,還引入了光線的概念,也就是一束光照過來,3D 圖形的每個面都會有什么變化,怎么反射等。不同材質(zhì)的物體反射的方式不同,比如漫反射、鏡面反射等,也就有不同的計算公式。一束光會照射到一些物體,到物體的反射,這個過程需要一系列跟蹤的計算,叫做光線追蹤技術(shù)。

我們也能感受出來,3D 圖形的計算量比 2D 圖形大太多了,用 CPU 計算很可能達不到 1s 大于 10 幀,所以后面出現(xiàn)了專門用于 3D 渲染加速的硬件,叫做 GPU。它是專門用于這種并行計算的,可以批量計算一堆頂點、一堆三角形、一堆像素的光柵化,這個渲染流程叫做渲染管線。

現(xiàn)在的渲染管線都是可編程的,也就是可以控制頂點的位置,每個三角形的著色,這兩種分別叫做頂點著色器(shader)、片元著色器。

總之,2D 或 3D 的圖形經(jīng)過繪制和光柵化就變成了一幀幀的圖像顯示出來。

變成圖像之后其實還可以做一些圖像處理,比如灰度、反色、高斯模糊等各種濾鏡的實現(xiàn)。

所以,前端的渲染技術(shù)的理論基礎(chǔ)是計算機圖形學 + 圖像處理。

不同的渲染技術(shù)的區(qū)別和聯(lián)系

具體到前前端的渲染技術(shù)來說,html+css、svg、canvas、webgl 都是用于圖形和圖像渲染的技術(shù),但是它們各有側(cè)重:

html + css

html + css 是用于圖文布局的,也就是計算文字、圖片、視頻等的顯示位置。它提供了很多計算規(guī)則,比如流式布局很適合做圖文排版,彈性布局易于做自適應(yīng)的布局等。但是它不適合做更靈活的圖形繪制,這時就要用其他幾種技術(shù)了。

canvas

canvas 是給定一塊畫布區(qū)域,在不同的位置畫圖形和圖像,它沒有布局規(guī)則,所以很靈活,常用來做可視化或者游戲的開發(fā)。但是 canvas 并不會保留繪制的圖形的信息,生成的圖像只能顯示在固定的區(qū)域,當顯示區(qū)域變大的時候,它不能跟隨一起放縮,就會失真,如果有放縮不失真的需求就要用其他渲染技術(shù)了。

svg

svg 會在內(nèi)存中保留繪制的圖形的信息,顯示區(qū)域變化后會重新計算,是一個矢量圖,常用于 icon、字體等的繪制。

webgl

上面的 3 種技術(shù)都是用于 2D 的圖形圖像的繪制,如果想繪制 3D 的內(nèi)容,就要用 webgl 了。它提供了繪制 3D 圖形的 api,比如通過頂點構(gòu)成 3D 的模型,給每一個面貼圖,設(shè)置光源,然后光柵化成圖像等的 api。它常用于通過 3D 內(nèi)容增強網(wǎng)站的交互效果,3D 的可視化,3D 游戲等,再就是虛擬現(xiàn)實中的 3D 交互。

所以,雖然前端渲染技術(shù)的底層原理都是圖形學 + 圖像處理,但上層提供的 4 種渲染技術(shù)各有側(cè)重點。

不過,它們還是有很多相同的地方的:

  • 位置、大小等的變化都是通過矩陣的計算
  • 都要經(jīng)過圖形轉(zhuǎn)圖像,也就是光柵化的過程
  • 都支持對圖像做進一步處理,比如各種濾鏡
  • html + css 渲染會分不同圖層分別做計算,canvas 也會根據(jù)計算量分成不同的 canvas 來做計算

因為他們底層的圖形學原理還是一致的。

除此以外,3D 內(nèi)容,也就是 webgl 的內(nèi)容會通過 GPU 來計算,但 css 其實也可以通過 GPU 計算,這叫做 css 的硬件加速,有四個屬性可以觸發(fā)硬件加速:transform、opacity、filter、will-change。(更多的 GPU 和 css 硬件加速的內(nèi)容可以看這篇文章:這一次,徹底搞懂 GPU 和 css 硬件加速)

編譯原理的應(yīng)用

除了圖形學和圖像技術(shù)外,html+css 還用到了編譯技術(shù)。因為 html、css 是一種 DSL( domin specific language,領(lǐng)域特定語言),也就是專門為界面描述所設(shè)計的語言。用 html 來表達 dom 結(jié)構(gòu),用 css 來給 dom 添加樣式都只需要很少的代碼,然后運行時解析 html 和 css 來創(chuàng)建 dom、添加樣式。

DSL 可以讓特定領(lǐng)域的邏輯更容易表達,前端領(lǐng)域還有一些其他技術(shù)也用到了 DSL,比如 graphql。

總結(jié)

前端領(lǐng)域的四種渲染技術(shù):html+css、canvas、svg、webgl 各有側(cè)重點,分別用于不同內(nèi)容的渲染:

  • html+ css 用于布局
  • canvas 用于靈活的圖形圖像渲染
  • svg 用于矢量圖渲染
  • webgl 用于 3D 圖形的渲染

但他們的理論基礎(chǔ)都是計算機圖形學 + 圖像處理。(而且,html+css 為了方便邏輯的表達,還設(shè)計了 DSL,這用到了編譯技術(shù))

這四種渲染技術(shù)看似差別很大,但在理論基礎(chǔ)層面,很多東西都是一樣的。這也是為什么我們要去學計算機基礎(chǔ),因為它可以讓我們對技術(shù)有一個更深入的更本質(zhì)的理解。

 

責任編輯:武曉燕 來源: 神光的編程秘籍
相關(guān)推薦

2010-06-13 13:35:54

計算機網(wǎng)絡(luò)協(xié)議

2010-04-05 17:04:22

約翰·馮·諾依曼生平

2022-07-21 12:25:54

智慧交通人工智能物聯(lián)網(wǎng)

2022-07-04 12:07:57

智慧城市智能建筑物聯(lián)網(wǎng)

2020-05-19 20:13:04

物聯(lián)網(wǎng)計算類型IOT

2018-12-05 16:25:14

2021-12-01 23:05:27

物聯(lián)網(wǎng)計算數(shù)據(jù)

2011-03-22 09:33:39

J-Hi

2015-10-10 10:58:45

Flynn指令流數(shù)據(jù)流

2010-04-15 10:45:57

IE9渲染引擎

2022-06-15 11:00:53

計算機病毒惡意代碼

2011-08-01 14:24:42

數(shù)據(jù)加密加密

2015-05-08 12:24:10

惡意軟件逃避技術(shù)

2009-01-12 09:37:56

AMD云計算Fusion

2022-06-27 11:09:06

邊緣計算

2016-12-06 09:01:14

2015-11-06 13:27:39

2021-06-18 16:16:32

計算機AI 定理

2012-02-22 11:13:53

Java

2021-08-25 10:41:09

人工智能AI深度學習
點贊
收藏

51CTO技術(shù)棧公眾號