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

圖解WebGL&Three.js工作原理

開發 前端
我們講兩個東西:WebGL背后的工作原理是什么?以Three.js為例,講述框架在背后扮演什么樣的角色?

[[214750]]

“哥,你又來啦?”

“是啊,我隨便逛逛。”

“別介啊……給我20分鐘,成不?”

“5分鐘吧,我很忙的。”

“不行,20分鐘,不然我真很難跟你講清楚。”

“好吧……”

“行,那進來吧,咱好好聊聊” 

一、我們講什么? 

我們講兩個東西: 

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生成。 

比如如下就是一段頂點著色器代碼:  

  1. attribute vec4 position; 
  2. void main() { 
  3.   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進行圖元裝配,有多少頂點,這段頂點著色器程序就運行了多少次。 

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

  1. attribute vec4 position; 
  2. uniform mat4 matrix; 
  3. void main() { 
  4.   gl_Position = position * matrix;   
  5.  

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

4.2.3、光柵化 

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

 

在圖元生成完畢之后,我們需要給模型“上色”,而完成這部分工作的,則是運行在GPU的“片元著色器”來完成。 

它同樣是一段opengl es程序,模型看起來是什么質地(顏色、漫反射貼圖等)、燈光等由片元著色器來計算。 

如下是一段簡單的片元著色器代碼:

 

  1. precision mediump float;   
  2. void main(void) { 
  3.     gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 
  4.  

 

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,所有頂點位置肯定都變化了。  

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

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

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

5.1.2、視圖矩陣 

 

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

 

  1. camera.position.y = 30; 

 

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

5.1.3、投影矩陣 

 

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

5.1.4、應用矩陣 

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

  1. gl_Position = position * modelMatrix * viewMatrix * projectionMatrix; 

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

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

 

5.2、片元著色器處理流程 

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

如下圖: 

 

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

 

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

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

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2017-05-08 11:41:37

WebGLThree.js

2021-02-05 15:01:41

GitLinux命令

2016-06-01 09:19:08

開發3D游戲

2024-10-30 10:06:51

2021-12-07 07:32:09

kafka架構原理

2010-03-19 14:57:52

三層交換機

2010-02-05 14:06:36

Android Dev

2023-08-04 09:56:15

2012-06-14 13:22:35

JavaScript

2020-09-07 11:14:02

Vue異步更新

2021-06-09 10:29:23

Kafka架構組件

2021-04-09 08:54:14

Kafka源碼架構開發技術

2009-06-18 13:31:03

Spring工作原理

2009-08-14 13:19:23

2021-11-22 06:14:45

Three.js3D 渲染花瓣雨

2021-08-02 07:57:03

注冊Nacos源碼

2022-11-08 00:00:00

監控系統Prometheus

2016-10-11 13:48:41

WebGLJavascriptWeb

2025-05-15 08:45:00

開源前端手勢

2021-04-23 16:40:49

Three.js前端代碼
點贊
收藏

51CTO技術棧公眾號

波多野结衣黄色网址| 久久久精品人妻无码专区| 91麻豆免费在线视频| 高清在线成人网| 日本亚洲精品在线观看| 奇米网一区二区| 51精品国产| 欧洲在线/亚洲| 老司机激情视频| 你懂的在线看| 国产白丝网站精品污在线入口| 2019国产精品自在线拍国产不卡| 妺妺窝人体色WWW精品| 日韩av综合| 欧美中文字幕久久| 久久99中文字幕| 欧美高清视频| 久久亚洲二区三区| 亚洲a成v人在线观看| 青青草视频在线观看免费| 欧美成人有码| 最近中文字幕日韩精品 | www.8ⅹ8ⅹ羞羞漫画在线看| 久久奇米777| 99r国产精品视频| 精品无码一区二区三区的天堂| 欧美亚洲不卡| 中文字幕欧美精品在线| 精品无码在线视频| 日韩精品一区二区三区中文字幕 | 亚洲专区视频| 精品久久人人做人人爰| 国产精品久久久久久9999| 日韩精品第一| 日韩欧美一区二区三区| 亚洲精品无码国产| 免费在线看电影| 亚洲视频免费在线| 一区二区不卡在线观看| 国产高清在线观看| 国产夜色精品一区二区av| 国产伦精品一区二区三区在线 | 九九热最新地址| 清纯唯美综合亚洲| 亚洲午夜小视频| 亚洲最大的黄色网| 国产精品美女在线观看直播| 精品奇米国产一区二区三区| 国产精品一级无码| 欧美三级一区| 欧美tk—视频vk| 亚洲日本久久久| jizz性欧美23| 亚洲国模精品私拍| 欧美夫妇交换xxx| 精品国产乱子伦一区二区| 欧美videos中文字幕| 性一交一黄一片| 69精品国产久热在线观看| 日韩精品一区二区三区在线观看| 年下总裁被打光屁股sp| 这里视频有精品| 精品对白一区国产伦| 亚洲天堂av网站| 日韩精品社区| 亚洲精选一区二区| 手机看片日韩av| 日韩久久视频| 久久天天躁狠狠躁夜夜av| 欧美老熟妇一区二区三区| 国产精品va| 亚洲91av视频| 久久久久久亚洲av无码专区| 美女免费视频一区二区| 91精品在线国产| 国产 欧美 自拍| 99亚偷拍自图区亚洲| 欧美日韩国产高清视频| av在线播放网| 亚洲欧美日韩中文播放| 欧洲精品在线播放| 伊人久久在线| 欧美精品 日韩| 伊人久久一区二区三区| 国产一区网站| 欧美插天视频在线播放| www.国产色| 青青草国产精品97视觉盛宴| 亚洲最大的免费| 天堂中文网在线| 国产色一区二区| 国产一二三四区在线观看| 色一区二区三区| 色av成人天堂桃色av| 欧美精品色视频| 秋霞综合在线视频| 久久精品中文字幕电影| 成年人午夜视频| 精品在线一区二区| 精品久久中出| 50度灰在线| 在线观看日产精品| 国产大尺度视频| 日本女优一区| 91国产视频在线播放| 亚洲自拍第二页| 松下纱荣子在线观看| 日韩中文欧美在线| 成人免费黄色网| 日本在线视频1区| 一区二区三区中文免费| 黄色av免费在线播放| 日韩精品一区二区三区中文在线| 一个色综合导航| 欧美精品亚洲精品日韩精品| 狠狠色综合日日| 日本一区二区在线| av中文字幕在线观看第一页| 欧美日韩国产综合一区二区 | 99精品视频在线播放观看| 亚洲午夜精品一区二区三区| 嗯啊主人调教在线播放视频 | 亚洲第一免费视频| 中文字幕成人网| 免费在线观看亚洲视频| 91精品久久久久久综合五月天| 国产亚洲精品久久久久久| 久久夜靖品2区| 手机看片1024国产| 91丨porny丨蝌蚪视频| 黄色特一级视频| 亚洲国产天堂| 中文字幕亚洲综合久久| 中文字幕xxxx| xf在线a精品一区二区视频网站| 黄色录像特级片| 一区二区三区日本视频| 中文字幕av一区中文字幕天堂| 91精品国产综合久久久蜜臀九色| 成人av在线一区二区三区| 欧美一区二区三区综合| 亚洲网站三级| 精品国偷自产在线| 亚洲无码精品在线观看| 中文字幕制服丝袜一区二区三区 | 免费在线小视频| 亚洲电影中文字幕| 日韩av片在线播放| 99这里都是精品| 欧美 丝袜 自拍 制服 另类| 欧美电影在线观看完整版| 97精品国产97久久久久久春色| 高清毛片aaaaaaaaa片| 亚洲国产aⅴ天堂久久| 亚洲av人人澡人人爽人人夜夜| 亚洲国产专区| 久久精品日韩精品| 成人在线爆射| 日韩在线视频网| 国产丝袜视频在线观看 | 九九热国产视频| 不卡视频一二三| 日本a级片免费观看| 国产精品免费不| 国产精品丝袜久久久久久高清| 午夜精品一区| 欧美一区二区三区四区五区 | 中文字幕在线视频区| 欧美视频一区在线观看| 亚洲国产精品一区二区久久hs| 狠狠色综合日日| 欧美国产日韩激情| 伊人久久大香线蕉av不卡| 国产精品白嫩美女在线观看| 成黄免费在线| 精品久久久三级丝袜| 在线观看 中文字幕| 久久久久久电影| 女同激情久久av久久| 激情一区二区| 欧洲av一区| 美女国产精品久久久| 欧美一级成年大片在线观看| 大乳在线免费观看| 日韩一卡二卡三卡| 国产成人一级片| 亚洲色图制服丝袜| 中文字幕av观看| 精品一区二区三区在线播放视频| 久久久久久久香蕉| 精品视频日韩| 国产日韩欧美一区二区三区四区| 成人黄色免费短视频| 欧美成年人在线观看| 免费在线视频一级不卡| 欧美一区二区三区四区在线观看| 依依成人综合网| 伊人色综合久久天天人手人婷| 一区二区三区免费在线观看视频| 久久99精品网久久| 91专区在线观看| 亚洲综合小说| 日韩精品第一页| 国产成人在线中文字幕| 国产欧美日韩中文字幕在线| 男人天堂视频在线观看| 久久视频在线直播| 看电影就来5566av视频在线播放| 日韩一区二区影院| 综合久久中文字幕| 欧美日韩国产中文精品字幕自在自线| 精品少妇一区二区三区密爱| 久久先锋影音av鲁色资源网| 精品人妻一区二区三区免费| 日韩电影在线一区二区三区| 3d动漫一区二区三区| 一区二区蜜桃| 亚洲一区二区精品在线| 久草精品在线| 久久免费视频1| 亚洲精品a区| 成人在线观看视频网站| 韩国精品主播一区二区在线观看| 午夜伦理精品一区| 欧美xxxx视频| 精品少妇一区二区30p| 午夜在线播放| 在线观看中文字幕亚洲| 久草视频视频在线播放| 亚洲精品影视在线观看| 熟妇高潮一区二区高潮| 精品免费视频一区二区| 午夜精品久久久久久久第一页按摩 | 国产精品正在播放| 亚洲涩涩在线观看| 麻豆一区二区在线| 麻豆一区二区三区视频| 日韩专区欧美专区| 热久久精品免费视频| 日韩电影在线一区二区| 中文字幕永久视频| 日本特黄久久久高潮| 亚洲精品视频导航| 人人狠狠综合久久亚洲| 搡女人真爽免费午夜网站| 日韩黄色一级片| 亚洲无吗一区二区三区| 美女一区二区视频| 亚洲一区二区三区观看| 国产自产视频一区二区三区| 一级日本黄色片| 国产白丝网站精品污在线入口| 岛国精品一区二区三区| 成人精品在线视频观看| 最近中文字幕无免费| 久久精品综合网| 中文字幕在线观看免费高清 | 在线观看成人av电影| 国产精品国内免费一区二区三区| 免费成人深夜夜行网站视频| 你懂的亚洲视频| 免费看毛片的网址| 亚洲作爱视频| 久久久久久久片| 精品在线播放免费| 久久人妻少妇嫩草av蜜桃| 91亚洲精品久久久蜜桃网站| 亚洲精品国产熟女久久久| 国产欧美精品一区二区色综合| 成年人看的免费视频| 一区二区三区高清| 国偷自拍第113页| 欧美性xxxxx极品少妇| 国产伦理一区二区| 欧美精品一区二区三区高清aⅴ | 国产精品美女www爽爽爽| 国产老头老太做爰视频| 亚洲成人av中文| 国产女主播喷水视频在线观看| 欧美日韩精品综合在线| 囯产精品一品二区三区| 在线视频国产日韩| av网站免费在线观看| 456国产精品| 日韩成人一区| 精品日产一区2区三区黄免费| 日韩欧美1区| 午夜免费福利小电影| 蜜臀久久99精品久久久久宅男| 波多野结衣中文字幕在线播放| 91啪九色porn原创视频在线观看| 日本人亚洲人jjzzjjz| 亚洲一级不卡视频| 免费看av在线| 精品成人在线观看| freemovies性欧美| 久久久久久999| 久久久国产精品网站| 福利视频久久| 日韩理论电影| 国产日韩一区二区在线| 国产老肥熟一区二区三区| 一卡二卡三卡四卡| 亚洲曰韩产成在线| 中文字幕 亚洲视频| 日韩av网站在线| 成年人黄视频在线观看| 国产精品成人aaaaa网站| 激情小说亚洲图片| 国产日本欧美在线| 日韩成人一区二区三区在线观看| 成人一区二区三区仙踪林| 国产精品视频九色porn| 欧美videossex极品| 欧美大黄免费观看| 免费a级人成a大片在线观看| 日本免费久久高清视频| 欧美日韩精品一区二区三区在线观看| 久久精品国产精品亚洲精品色| 日韩一区精品视频| 国精产品一区一区三区免费视频 | 91免费小视频| 久久无码精品丰满人妻| 欧美一区二区三区喷汁尤物| 日本美女高清在线观看免费| 国产98色在线| 亚州综合一区| 国产96在线 | 亚洲| 国产999精品久久久久久绿帽| 成人信息集中地| 欧美日韩精品一区视频| av在线免费观看网站| 国产精品免费一区豆花| 神马久久一区二区三区| 成人三级视频在线播放| 久久综合色一综合色88| 久久久久久久久久久久久久av| 精品黑人一区二区三区久久| hd国产人妖ts另类视频| 国产精品免费一区二区三区观看| 国产精品v日韩精品v欧美精品网站 | 丁香婷婷综合色啪| 精品处破女学生| 亚洲的天堂在线中文字幕| 黄色在线观看视频网站| 国产区日韩欧美| 亚洲欧美清纯在线制服| 性少妇bbw张开| 91精品1区2区| youjizz在线播放| 国产精品自产拍在线观看| 99精品电影| 老司机av网站| 婷婷激情综合网| 黄色大片在线免费观看| 国产免费一区二区三区在线观看| 日韩在线观看一区| 亚洲欧美天堂在线| 亚洲一区在线观看免费| 日韩中文字幕免费观看| 8x拔播拔播x8国产精品| 亚洲电影一级片| 中文字幕第88页| 亚洲精品久久久久久国产精华液| 日本xxxx人| 国产97色在线| 亚洲二区三区不卡| 秘密基地免费观看完整版中文| 懂色av中文一区二区三区天美 | 欧美成人精品激情在线观看| gogo久久日韩裸体艺术| 午夜肉伦伦影院| 国产精品传媒在线| 亚洲爱情岛论坛永久| 啪一啪鲁一鲁2019在线视频| 成人在线电影在线观看视频| www.久久久久久久久久久| 亚洲一区二三区| 麻豆国产在线播放| 成人欧美一区二区三区黑人孕妇| 激情自拍一区| 欧美xxxx精品| 欧美成人精精品一区二区频| 日本不卡一二三| 无码人妻aⅴ一区二区三区日本| 成人av免费观看| 国产又粗又猛又爽又| 欧美乱妇高清无乱码| 亚洲国产精品嫩草影院久久av| 国产乱女淫av麻豆国产| 亚洲成人av在线电影| 在线观看免费高清完整| 国产精品一区二区欧美| 美国十次了思思久久精品导航| 日本三级中文字幕| 色偷偷偷综合中文字幕;dd| 奇米777国产一区国产二区| www.国产福利| 91电影在线观看| 精品一性一色一乱农村|