精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

WebGL和Three.js工作原理圖解

開發 項目管理
當我們選擇材質后,three.js會根據我們所選的材質,選擇對應的頂點著色器和片元著色器。

一、我們講什么?

我們講兩個東西:

  • 1、WebGL背后的工作原理是什么?
  • 2、以Three.js為例,講述框架在背后扮演什么樣的角色?

二、我們為什么要了解原理?

我們假定你對WebGL已經有一定了解,或者用Three.js做過了一些東西,這個時候,你可能碰到了這樣一些問題:

  • 1、很多東西還是做不出來,甚至沒有任何思路;
  • 2、碰到bug無法解決,甚至沒有方向;
  • 3、性能出現問題,完全不知道如何去優化。

這個時候,我們需要了解更多。

三、先了解一個基礎概念

1、什么是矩陣?

簡單說來,矩陣用于坐標變換,如下圖:

2、那它具體是怎么變換的呢,如下圖:

3、舉個實例,將坐標平移2,如下圖:

如果這時候,你還是沒有理解,沒有關系,你只需要知道,矩陣用于坐標變換。

四、WebGL的工作原理

4.1、WebGL API

在了解一門新技術前,我們都會先看看它的開發文檔或者API。

查看Canvas的繪圖API,我們會發現它能畫直線、矩形、圓、弧線、貝塞爾曲線。

于是,我們看了看WebGL繪圖API,發現:

它只能會點、線、三角形?一定是我看錯了。
沒有,你沒看錯。

就算是這樣一個復雜的模型,也是一個個三角形畫出來的。

4.2、WebGL繪制流程

簡單說來,WebGL繪制過程包括以下三步:

1、獲取頂點坐標
2、圖元裝配(即畫出一個個三角形)
3、光柵化(生成片元,即一個個像素點)

接下來,我們分步講解每個步驟。

4.2.1、獲取頂點坐標

頂點坐標從何而來呢?一個立方體還好說,如果是一個機器人呢?

沒錯,我們不會一個一個寫這些坐標。

往往它來自三維軟件導出,或者是框架生成,如下圖:

寫入緩存區是啥?

沒錯,為了簡化流程,之前我沒有介紹。

由于頂點數據往往成千上萬,在獲取到頂點坐標后,我們通常會將它存儲在顯存,即緩存區內,方便GPU更快讀取。

4.2.2、圖元裝配

我們已經知道,圖元裝配就是由頂點生成一個個圖元(即三角形)。那這個過程是自動完成的嗎?答案是并非完全如此。
為了使我們有更高的可控性,即自由控制頂點位置,WebGL把這個權力交給了我們,這就是可編程渲染管線(不用理解)。

WebGL需要我們先處理頂點,那怎么處理呢?我們先看下圖:

我們引入了一個新的名詞,叫“頂點著色器”,它由opengl es編寫,由javascript以字符串的形式定義并傳遞給GPU生成。
比如如下就是一段頂點著色器代碼:

attribute vec4 position;
void main() {
  gl_Position = position; 
}

attribute修飾符用于聲明由瀏覽器(javascript)傳輸給頂點著色器的變量值;

position即我們定義的頂點坐標;

gl_Position是一個內建的傳出變量。

這段代碼什么也沒做,如果是繪制2d圖形,沒問題,但如果是繪制3d圖形,即傳入的頂點坐標是一個三維坐標,我們則需要轉換成屏幕坐標。

比如:v(-0.5, 0.0, 1.0)轉換為p(0.2, -0.4),這個過程類似我們用相機拍照。

4.2.2.1、頂點著色器處理流程

回到剛才的話題,頂點著色器是如何處理頂點坐標的呢?

如上圖,頂點著色器會先將坐標轉換完畢,然后由GPU進行圖元裝配,有多少頂點,這段頂點著色器程序就運行了多少次。

你可能留意到,這時候頂點著色器變為:

attribute vec4 position;
uniform mat4 matrix;
void main() {
  gl_Position = position * matrix; 
}

這就是應用了矩陣matrix,將三維世界坐標轉換成屏幕坐標,這個矩陣叫投影矩陣,由javascript傳入,至于這個matrix怎么生成,我們暫且不討論。

4.2.3、光柵化

和圖元裝配類似,光柵化也是可控的。

在圖元生成完畢之后,我們需要給模型“上色”,而完成這部分工作的,則是運行在GPU的“片元著色器”來完成。
它同樣是一段opengl es程序,模型看起來是什么質地(顏色、漫反射貼圖等)、燈光等由片元著色器來計算。
如下是一段簡單的片元著色器代碼:

precision mediump float; 
void main(void) {
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

gl_FragColor即輸出的顏色值。

4.2.3.1、片元著色器處理流程

片元著色器具體是如何控制顏色生成的呢?

如上圖,頂點著色器是有多少頂點,運行了多少次,而片元著色器則是,生成多少片元(像素),運行多少次。

4.3、WebGL的完整工作流程

至此,實質上,WebGL經歷了如下處理流程:

1、準備數據階段

在這個階段,我們需要提供頂點坐標、索引(三角形繪制順序)、uv(決定貼圖坐標)、法線(決定光照效果),以及各種矩陣(比如投影矩陣)。

其中頂點數據存儲在緩存區(因為數量巨大),以修飾符attribute傳遞給頂點著色器;

矩陣則以修飾符uniform傳遞給頂點著色器。

2、生成頂點著色器

根據我們需要,由Javascript定義一段頂點著色器(opengl es)程序的字符串,生成并且編譯成一段著色器程序傳遞給GPU。

3、圖元裝配

GPU根據頂點數量,挨個執行頂點著色器程序,生成頂點最終的坐標,完成坐標轉換。

4、生成片元著色器

模型是什么顏色,看起來是什么質地,光照效果,陰影(流程較復雜,需要先渲染到紋理,可以先不關注),都在這個階段處理。

5、光柵化

能過片元著色器,我們確定好了每個片元的顏色,以及根據深度緩存區判斷哪些片元被擋住了,不需要渲染,最終將片元信息存儲到顏色緩存區,最終完成整個渲染。

五、Three.js究竟做了什么?

我們知道,three.js幫我們完成了很多事情,但是它具體做了什么呢,他在整個流程中,扮演了什么角色呢?

我們先簡單看一下,three.js參與的流程:

黃色和綠色部分,都是three.js參與的部分,其中黃色是javascript部分,綠色是opengl es部分。

我們發現,能做的,three.js基本上都幫我們做了。

  • 輔助我們導出了模型數據;
  • 自動生成了各種矩陣;
  • 生成了頂點著色器;
  • 輔助我們生成材質,配置燈光;
  • 根據我們設置的材質生成了片元著色器。

而且將webGL基于光柵化的2D API,封裝成了我們人類能看懂的 3D API。

5.1、Three.js頂點處理流程

從WebGL工作原理的章節中,我們已經知道了頂點著色器會將三維世界坐標轉換成屏幕坐標,但實際上,坐標轉換不限于投影矩陣。

如下圖:

之前WebGL在圖元裝配之后的結果,由于我們認為模型是固定在坐標原點,并且相機在x軸和y軸坐標都是0,其實正常的結果是這樣的:

5.1.1、模型矩陣

現在,我們將模型順時針旋轉Math.PI/6,所有頂點位置肯定都變化了。

box.rotation.y = Math.PI/6;

但是,如果我們直接將頂點位置用javascript計算出來,那性能會很低(頂點通常成千上萬),而且,這些數據也非常不利于維護。

所以,我們用矩陣modelMatrix將這個旋轉信息記錄下來。

5.1.2、視圖矩陣

然后,我們將相機往上偏移30。

camera.position.y = 30;

同理,我們用矩陣viewMatrix將移動信息記錄下來。

5.1.3、投影矩陣

這是我們之前介紹過的了,我們用projectMatrix記錄。

5.1.4、應用矩陣

然后,我們編寫頂點著色器:

gl_Position = position * modelMatrix * viewMatrix * projectionMatrix;

這樣,我們就在GPU中,將最終頂點位置計算出來了。

實際上,上面所有步驟,three.js都幫我們完成了。

5.2、片元著色器處理流程

我們已經知道片元著色器負責處理材質、燈光等信息,但具體是怎么處理呢?

如下圖:

5.3、three.js完整運行流程:

當我們選擇材質后,three.js會根據我們所選的材質,選擇對應的頂點著色器和片元著色器。

three.js中已經內置了我們常用著色器。

責任編輯:張燕妮 來源: 萬波 Bruce Wan
相關推薦

2017-12-26 17:42:12

前端WebGLThree.js

2021-11-22 06:14:45

Three.js3D 渲染花瓣雨

2025-05-15 08:45:00

開源前端手勢

2021-04-23 16:40:49

Three.js前端代碼

2021-02-05 15:01:41

GitLinux命令

2022-07-15 13:09:33

Three.js前端

2019-11-29 09:30:37

Three.js3D前端

2023-08-04 09:56:15

2016-06-01 09:19:08

開發3D游戲

2024-07-18 06:58:36

2025-09-19 09:29:53

Web 3D引擎Three.jsGalacean

2021-12-14 11:44:37

可視化Three.js 信息

2021-12-03 07:27:30

全景瀏覽Three.js

2022-03-07 09:20:00

JavaScripThree.jsNFT

2022-01-16 19:23:25

Three.js粒子動畫群星送福

2022-07-08 10:39:09

Three.js元宇宙VR

2025-03-13 10:54:18

2021-11-27 10:42:01

Three.js3D可視化AudioContex

2025-06-17 08:15:00

VTK.jsThree.js3D

2024-10-30 10:06:51

點贊
收藏

51CTO技術棧公眾號

久久九九国产精品怡红院 | 欧美在线黄色| 欧美一区二区三区成人| 色婷婷777777仙踪林| xxxx国产精品| 免费久久99精品国产自在现线| 一区二区三区视频免费在线观看 | 国产成人精品在线看| 国产91成人在在线播放| 任你操精品视频| 久久久久亚洲精品中文字幕| 精品日韩视频在线观看| 亚洲一区二区在线看| 亚洲av少妇一区二区在线观看| 亚洲在线电影| 欧美夫妻性生活xx| 色欲av无码一区二区三区| 亚洲午夜剧场| 欧美视频在线观看免费| 致1999电视剧免费观看策驰影院| 欧美熟女一区二区| 激情深爱一区二区| 91国产美女在线观看| 日韩一卡二卡在线观看| 亚洲欧美日本伦理| 日韩视频在线永久播放| 日韩久久一级片| 欧美巨大xxxx做受沙滩| 国产精品欧美极品| 久久精品日产第一区二区三区精品版 | 99国产**精品****| 日韩黄色av网站| 日本r级电影在线观看| 国产精品字幕| 一本大道av伊人久久综合| av在线com| 黄色成人影院| 中文字幕中文在线不卡住| 免费影院在线观看一区| 天天综合永久入口| 懂色av噜噜一区二区三区av| 亚洲va国产va天堂va久久| 亚洲 欧美 中文字幕| 在线亚洲观看| 668精品在线视频| 一区二区在线观看免费视频| 97视频热人人精品免费| 国产小视频国产精品| 久久精品老司机| 日本一道高清一区二区三区| 亚洲国产又黄又爽女人高潮的| 中国老熟女重囗味hdxx| 精品国产乱码久久久久久樱花| 欧美亚洲免费在线一区| 91蝌蚪视频在线观看| 欧美电影h版| 色婷婷精品久久二区二区蜜臀av | 久久国产日韩欧美精品| 国产精品亚洲欧美导航| 久久这里只有精品9| 日韩福利视频网| 国产精品极品在线| 日韩xxx视频| 黄色小说综合网站| 亚洲精品免费在线视频| hs视频在线观看| 国产成人精品一区二| 国产美女精品久久久| 色网站免费观看| 91亚洲男人天堂| 欧美二区在线| av一区在线观看| 国产精品每日更新在线播放网址| 一区二区三区四区国产| 国产黄色小视频在线| 夜夜爽夜夜爽精品视频| 无码粉嫩虎白一线天在线观看| а√在线天堂官网| 91黄色在线观看| 天天做天天干天天操| 一区二区在线视频观看| 亚洲高清福利视频| 免费人成又黄又爽又色| 99久久婷婷国产综合精品电影√| 久久深夜福利免费观看| 亚洲自拍小视频| 欧美精品在线观看播放| 欧美激情综合网| 日本韩国精品在线| 成人在线观看你懂的| 性欧美freesex顶级少妇| 在线观看日产精品| 99国产精品免费视频| 久久综合另类图片小说| 亚洲欧洲日产国码av系列天堂| 国产成人综合精品| 高h视频免费观看| 精品在线视频免费| 亚洲精品一区二区三区在线| 亚洲国产欧美一区二区丝袜黑人| b站大片免费直播| 最新精品国产| 国产成人在线亚洲欧美| av免费在线不卡| 久久综合九色综合欧美亚洲| 欧美日韩亚洲国产成人| 亚洲淫成人影院| 91精品国产91久久久久久一区二区| 国产麻豆剧传媒精品国产av| 欧美3p在线观看| 欧美在线精品免播放器视频| 国产女人18毛片18精品| 久久久久久亚洲综合影院红桃| 色撸撸在线观看| 欧美国产大片| 亚洲国产高清自拍| 波多野结衣久久久久| 亚洲一区国产| 国产99视频精品免费视频36| 色哟哟免费在线观看| 欧美日韩国产丝袜美女| 久久婷婷综合色| 丝袜久久网站| 久久久久久九九九| 国产免费久久久| 国产精品天干天干在线综合| 国产二区视频在线播放| 91精品丝袜国产高跟在线| 中文字幕一精品亚洲无线一区| 日韩 欧美 中文| 国产v综合v亚洲欧| 欧美性受xxxx黑人猛交88| 亚洲电影有码| 亚洲欧洲在线观看| 国产香蕉视频在线| 国产jizzjizz一区二区| 青青在线免费视频| 成人51免费| 日韩视频免费在线| 在线视频你懂得| 欧美国产精品一区| 一道本视频在线观看| 精品99久久| 奇米一区二区三区四区久久| 亚洲欧美综合一区二区| 天天射综合影视| 看全色黄大色黄女片18| 在线观看的日韩av| 国产美女在线精品免费观看| 国产探花在线观看| 欧美精品一区二区三区在线播放 | 日本一区二区综合亚洲| 国产黄色特级片| 久久最新网址| 国产精品劲爆视频| www.国产精品.com| 欧美午夜精品一区| 后入内射无码人妻一区| 久久99精品久久久久久久久久久久| 亚洲区一区二区三区| 精品美女一区| 蜜臀久久99精品久久久无需会员| 99久久久国产精品无码网爆| 一区二区三区精品视频在线| 色哟哟视频在线| 午夜亚洲视频| 天天好比中文综合网| 欧美videos粗暴| 欧美成人免费网| 欧美视频在线观看一区二区三区| 婷婷综合久久一区二区三区| 无码h肉动漫在线观看| 奇米一区二区三区av| 欧美一级免费在线观看| heyzo欧美激情| 欧美亚洲国产精品| 国产黄色在线| 欧美一区日本一区韩国一区| 国产稀缺真实呦乱在线| 久久午夜电影网| 日韩av.com| 一区精品久久| 日本一区免费在线观看| 国产区一区二| 777午夜精品福利在线观看| 国产高清视频在线| 日韩视频在线一区二区| 麻豆精品久久久久久久99蜜桃| 国产精品全国免费观看高清| 国产精品欧美性爱| 久久久精品五月天| 可以免费看的黄色网址| 精品国产导航| 国产精品一区久久久| 丁香花在线观看完整版电影| 亚洲欧洲视频在线| 亚洲av少妇一区二区在线观看| 日本乱码高清不卡字幕| 五月天丁香激情| 久久久久久久性| 久草福利在线观看| 青草国产精品久久久久久| 无码av天堂一区二区三区| 成人羞羞网站| 精品久久久久久综合日本| 亚洲欧洲一二区| 欧美一级大片在线观看| 9191在线播放| 在线视频日韩精品| 无码国产色欲xxxx视频| 欧美一区二区三区免费在线看| 亚洲综合久久网| 一区二区三区四区中文字幕| 亚洲一级黄色录像| 91在线观看一区二区| 国产老头和老头xxxx×| 美女一区二区视频| 久久久久久久激情| 亚洲私拍自拍| 国产女人18毛片| 91欧美在线| 日韩一区二区三区资源| 欧美巨大xxxx| 国产精品毛片va一区二区三区| 狠狠久久伊人中文字幕| 国产mv久久久| 激情国产在线| 久久久久久久久久久久av| 黄网站在线免费看| 色婷婷综合成人| 国产精品免费观看| 亚洲天堂影视av| 无码国精品一区二区免费蜜桃| 精品久久久久久久久久久久久久久久久| 一道本在线视频| 欧美日精品一区视频| 无码无套少妇毛多18pxxxx| 精品久久中文字幕久久av| 国产无遮无挡120秒| 夜夜嗨av一区二区三区| 真实国产乱子伦对白在线| 又紧又大又爽精品一区二区| 91麻豆免费视频网站| 亚洲丝袜另类动漫二区| chinese全程对白| 亚洲人成影院在线观看| 最新一区二区三区| 亚洲欧美激情小说另类| 日本高清一二三区| 一片黄亚洲嫩模| 亚洲黄色一区二区| 午夜精品久久久久久久久久久| 日本熟妇毛茸茸丰满| 欧美日韩激情小视频| 特级西西444www大精品视频免费看| 精品国产91乱高清在线观看| 国产成人免费看| 在线欧美一区二区| 在线观看中文字幕码| 欧美日韩国产一级片| 国产视频在线一区| 日韩精品一区二区三区视频| 亚洲高清精品视频| 日韩激情av在线免费观看| 好男人免费精品视频| 中文字幕不卡在线视频极品| 思思99re6国产在线播放| 九九热精品视频| hd国产人妖ts另类视频| 日本一区二区三区四区视频| 国产成人77亚洲精品www| 国产精品久久久久久久久久免费| 日韩久久99| 国产精品国产精品国产专区蜜臀ah | 亚洲欧美伊人| 免费国产a级片| 日韩av在线发布| 污污网站在线观看视频| 国产成人精品免费在线| 欧美一区二区三区成人精品| 国产精品天美传媒| 欧美成人aaaaⅴ片在线看| 色呦呦国产精品| 国产哺乳奶水91在线播放| 日韩激情视频在线播放| 色开心亚洲综合| 国内精品国产三级国产在线专| 九九热线视频只有这里最精品| 成人免费视频97| 欧美毛片免费观看| 亚洲一区三区电影在线观看| 激情欧美国产欧美| 国产免费又粗又猛又爽| 成人精品免费视频| 免费一级特黄3大片视频| 亚洲成在人线免费| 成人免费一区二区三区| 精品成人私密视频| av免费观看一区二区| 97久久超碰福利国产精品…| 成人涩涩视频| 久久99欧美| 综合激情网站| 国产视频一区二区三区在线播放| 国产精品资源在线看| 亚洲av无码国产精品麻豆天美| 樱花草国产18久久久久| 丰满人妻一区二区三区四区| 亚洲成人久久网| 快射视频在线观看| 国产91精品网站| 国产精品任我爽爆在线播放| 一区二区三区四区国产| 久久亚洲不卡| yy1111111| 一级特黄大欧美久久久| 在线观看不卡的av| 亚洲欧美www| 国产h片在线观看| 91入口在线观看| 99国内精品久久久久久久| 性生交免费视频| 成人黄色网址在线观看| 国产suv一区二区三区| 欧美日韩中文国产| 欧美男男激情freegay| 久久久久久欧美| 一区二区三区四区精品视频| 2021狠狠干| 国产一区二三区| 国产黄色录像片| 欧美日本免费一区二区三区| 国产精品麻豆一区二区三区| 青青在线视频一区二区三区| 美女av一区| 成人中文字幕在线播放| 不卡一区二区三区四区| 国产网站在线看| 精品久久免费看| 国产蜜臀一区二区打屁股调教| 亚洲综合色激情五月| 成人网视频在线观看| 欧美暴力喷水在线| 性高潮久久久久久久久| 亚洲在线观看| 艳妇乳肉亭妇荡乳av| 午夜精品久久久久久不卡8050| 成人毛片在线精品国产| 五月婷婷激情综合网| 欧美日韩最好看的视频| 视频一区二区三区四区五区| 香蕉一区二区| 国产精品日韩高清| 欧美三区在线| 国产精品一区视频网站| 国产伦精品一区二区三区视频| 日韩中文字幕三区| 久久综合久久综合久久| 中文字幕在线播| 一区二区三区亚洲| 日本成人福利| 免费成人深夜夜行网站视频| 国产成人精品在线看| 日韩精品在线不卡| 亚洲欧美在线磁力| 成人国产激情| 日韩人妻精品一区二区三区| 国产精品亚洲一区二区三区妖精 | 国产高中女学生第一次| 欧美国产第二页| 久久黄色影视| 成人在线免费播放视频| 中文字幕精品在线不卡| 国产裸体无遮挡| 久久久亚洲国产| 久久99精品久久久久久园产越南| 99热成人精品热久久66| 国产精品免费网站在线观看| 国产精品一区二区av白丝下载| 欧美日韩国产成人| 丝袜连裤袜欧美激情日韩| 亚洲欧美国产日韩综合| 一区二区三区蜜桃| 婷婷国产在线| 国产在线拍偷自揄拍精品| 国精品一区二区三区| 亚洲第一成人网站| 91精品国产综合久久精品性色| 好吊日av在线| 日韩国产高清一区| 国产白丝网站精品污在线入口| 日本一区二区免费电影| 久久久999精品| 秋霞影视一区二区三区| 日本黄色的视频| 欧美日韩性生活视频| 秋霞午夜在线观看| 久久精品国产一区二区三区不卡| 激情六月婷婷综合| 91视频久久久|