久久婷婷麻豆国产91天堂,日韩欧美一级在线,久久亚洲一区二区三区四区 http://www.6625500.cn/ zh-hans 虛擬展廳技術(shù):WebGL完整工作流程以及 Three.js 原理 http://www.6625500.cn/news/512 <span>虛擬展廳技術(shù):WebGL完整工作流程以及 Three.js 原理</span> <span><span lang="" about="http://www.6625500.cn/user/1" typeof="schema:Person" property="schema:name" datatype="" xml:lang="">Jyadmin</span></span> <span>周五, 02/19/2021 - 16:42</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p>?</p> <h4><strong>虛擬展廳技術(shù):WebGL的完整工作流程</strong></h4> <p>1、準(zhǔn)備數(shù)據(jù)階段</p> <p>在這個(gè)階段,我們需要提供頂點(diǎn)坐標(biāo)、索引(三角形繪制順序)、uv(決定貼圖坐標(biāo))、法線(決定光照效果),以及各種矩陣(比如投影矩陣)。</p> <p>其中頂點(diǎn)數(shù)據(jù)存儲(chǔ)在緩存區(qū)(因?yàn)閿?shù)量巨大),以修飾符attribute傳遞給頂點(diǎn)著色器;</p> <p>矩陣則以修飾符uniform傳遞給頂點(diǎn)著色器。</p> <p>2、生成頂點(diǎn)著色器</p> <p>根據(jù)我們需要,由Javascript定義一段頂點(diǎn)著色器(opengl es)程序的字符串,生成并且編譯成一段著色器程序傳遞給GPU。</p> <p>3、圖元裝配</p> <p>GPU根據(jù)頂點(diǎn)數(shù)量,挨個(gè)執(zhí)行頂點(diǎn)著色器程序,生成頂點(diǎn)最終的坐標(biāo),完成坐標(biāo)轉(zhuǎn)換。</p> <p>4、生成片元著色器</p> <p>模型是什么顏色,看起來是什么質(zhì)地,光照效果,陰影(流程較復(fù)雜,需要先渲染到紋理,可以先不關(guān)注),都在這個(gè)階段處理。</p> <p>5、光柵化</p> <p>能過片元著色器,我們確定好了每個(gè)片元的顏色,以及根據(jù)深度緩存區(qū)判斷哪些片元被擋住了,不需要渲染,最終將片元信息存儲(chǔ)到顏色緩存區(qū),最終完成整個(gè)渲染。</p> <p><img alt="光柵化" data-entity-type="file" data-entity-uuid="eeccf534-ffd3-49d4-a7b6-2aef854c7a42" src="http://www.6625500.cn/sites/default/files/inline-images/%E5%85%89%E6%A0%85%E5%8C%96.jpg" width="727" height="299" loading="lazy" /></p> <h4><strong>虛擬展廳技術(shù):Three.js 原理</strong></h4> <p>three.js參與的流程:</p> <p><img alt="three.js參與的流程" data-entity-type="file" data-entity-uuid="aa6f5fa7-e71a-4133-87be-57e71d88cd3c" src="http://www.6625500.cn/sites/default/files/inline-images/three.js%E5%8F%82%E4%B8%8E%E7%9A%84%E6%B5%81%E7%A8%8B.jpg" width="712" height="244" loading="lazy" /></p> <p>黃色和綠色部分,都是three.js參與的部分,其中黃色是javascript部分,綠色是opengl es部分。</p> <p>three.js可以實(shí)現(xiàn):</p> <ul><li> <p>輔助我們導(dǎo)出了模型數(shù)據(jù);</p> </li> <li> <p>自動(dòng)生成了各種矩陣;</p> </li> <li> <p>生成了頂點(diǎn)著色器;</p> </li> <li> <p>輔助我們生成材質(zhì),配置燈光;</p> </li> <li> <p>根據(jù)我們?cè)O(shè)置的材質(zhì)生成了片元著色器。</p> </li> <li> <p>而且將webGL基于光柵化的2D API,封裝成了我們?nèi)祟惸芸炊?3D API。</p> </li> </ul><h5><strong>?Three.js頂點(diǎn)處理流程</strong></h5> <p>從WebGL工作原理的章節(jié)中,我們已經(jīng)知道了頂點(diǎn)著色器會(huì)將三維世界坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo),但實(shí)際上,坐標(biāo)轉(zhuǎn)換不限于投影矩陣。</p> <p>如下圖:</p> <p><img alt="Three.js頂點(diǎn)處理流程" data-entity-type="file" data-entity-uuid="f4315902-b88b-415c-8782-0aba132ccc34" src="http://www.6625500.cn/sites/default/files/inline-images/Three.js%E9%A1%B6%E7%82%B9%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B.jpg" width="709" height="202" loading="lazy" /></p> <p>之前WebGL在圖元裝配之后的結(jié)果,由于我們認(rèn)為模型是固定在坐標(biāo)原點(diǎn),并且相機(jī)在x軸和y軸坐標(biāo)都是0,其實(shí)正常的結(jié)果是這樣的:</p> <p><img alt="WebGL在圖元裝配之后的結(jié)果" data-entity-type="file" data-entity-uuid="c4615c8b-2c34-494c-b971-7bd12ae60dd4" src="http://www.6625500.cn/sites/default/files/inline-images/WebGL%E5%9C%A8%E5%9B%BE%E5%85%83%E8%A3%85%E9%85%8D%E4%B9%8B%E5%90%8E%E7%9A%84%E7%BB%93%E6%9E%9C.jpg" width="676" height="181" loading="lazy" /></p> <h5><strong>模型矩陣</strong></h5> <p><strong><img alt="模型矩陣" data-entity-type="file" data-entity-uuid="0bc27d25-073f-4b55-86aa-7308e0fc225f" src="http://www.6625500.cn/sites/default/files/inline-images/%E6%A8%A1%E5%9E%8B%E7%9F%A9%E9%98%B5.jpg" width="639" height="183" loading="lazy" /></strong></p> <p>現(xiàn)在,將模型順時(shí)針旋轉(zhuǎn)Math.PI/6,所有頂點(diǎn)位置肯定都變化了。</p> <blockquote> <p>box.rotation.y = Math.PI/6;</p> </blockquote> <p>?但是,如果我們直接將頂點(diǎn)位置用javascript計(jì)算出來,那性能會(huì)很低(頂點(diǎn)通常成千上萬),而且,這些數(shù)據(jù)也非常不利于維護(hù)。</p> <h5><strong>視圖矩陣</strong></h5> <p><strong><img alt="視圖矩陣" data-entity-type="file" data-entity-uuid="ca7509e5-3ab0-484b-b4fb-aa6c59437b4c" src="http://www.6625500.cn/sites/default/files/inline-images/%E8%A7%86%E5%9B%BE%E7%9F%A9%E9%98%B5.jpg" width="677" height="230" loading="lazy" /></strong></p> <p>將相機(jī)往上偏移30。</p> <blockquote> <blockquote> <p>camera.position.y = 30;</p> </blockquote> </blockquote> <p>?同理,我們用矩陣viewMatrix將移動(dòng)信息記錄下來。</p> <h5><strong>投影矩陣</strong></h5> <p><strong><img alt="投影矩陣" data-entity-type="file" data-entity-uuid="abd24d16-b371-4ac1-807b-1136ed4a67d1" src="http://www.6625500.cn/sites/default/files/inline-images/%E6%8A%95%E5%BD%B1%E7%9F%A9%E9%98%B5.jpg" width="677" height="218" loading="lazy" /></strong></p> <p>用projectMatrix記錄。</p> <h5><strong>應(yīng)用矩陣</strong></h5> <p>編寫頂點(diǎn)著色器:</p> <blockquote> <p>gl_Position = position * modelMatrix * viewMatrix * projectionMatrix;</p> </blockquote> <p>?</p> <p>這樣,我們就在GPU中,將最終頂點(diǎn)位置計(jì)算出來了。</p> <p>實(shí)際上,上面所有步驟,three.js都幫我們完成了。</p> <p><img alt="應(yīng)用矩陣" data-entity-type="file" data-entity-uuid="1c71ec1e-e9a0-4462-9d7f-8fbd81903665" src="http://www.6625500.cn/sites/default/files/inline-images/%E5%BA%94%E7%94%A8%E7%9F%A9%E9%98%B5.jpg" width="723" height="361" loading="lazy" /></p> <h4><strong>片元著色器處理流程</strong></h4> <p>片元著色器負(fù)責(zé)處理材質(zhì)、燈光等信息,但具體是怎么處理呢?</p> <p>如下圖:</p> <p><img alt="片元著色器處理流程" data-entity-type="file" data-entity-uuid="94f1bd98-fb5f-46d5-933a-2ced20baea40" src="http://www.6625500.cn/sites/default/files/inline-images/%E7%89%87%E5%85%83%E7%9D%80%E8%89%B2%E5%99%A8%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B.jpg" width="712" height="334" loading="lazy" /></p> <h4><strong>three.js完整運(yùn)行流程</strong></h4> <p><img alt="three.js完整運(yùn)行流程" data-entity-type="file" data-entity-uuid="90ade1ce-0dc6-42e4-9152-732bfa431a5f" src="http://www.6625500.cn/sites/default/files/inline-images/three.js%E5%AE%8C%E6%95%B4%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B.jpg" width="711" height="272" loading="lazy" /></p> <p>當(dāng)選擇材質(zhì)后,three.js會(huì)根據(jù)所選的材質(zhì),選擇對(duì)應(yīng)的頂點(diǎn)著色器和片元著色器。</p> <p>three.js中已經(jīng)內(nèi)置了我們常用著色器。</p> <p>?</p> <p>?</p> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">標(biāo)簽</div> <div class="field--items"> <div class="field--item"><a href="http://www.6625500.cn/taxonomy/term/21" hreflang="zh-hans">虛擬展廳,WebGL,Three.js</a></div> </div> </div> Fri, 19 Feb 2021 08:42:37 +0000 Jyadmin 512 at http://www.6625500.cn 主站蜘蛛池模板: 亚洲黄色在线免费观看 | 久久久精品网站 | 亚洲va在线va天堂va狼色在线 | 日韩精品免费在线观看 | 亚洲最大成人综合 | 国产一级毛片精品完整视频版 | 精产国产伦理一二三区 | 日韩免 | 国产成人精品免费视频大全最热 | 老头搡老女人毛片视频在线看 | 色综合一区二区 | 精品亚洲一区二区三区四区五区 | 有码一区 | 久久精品国产一区二区 | 成人免费三级电影 | 国产精品精品久久久 | 国内精品久久精品 | 国产精品人人做人人爽 | 欧美成年人视频在线观看 | 午夜影院| 91在线色视频 | 久久国产精品-国产精品 | 亚洲成a人片 | a视频在线观看 | 九九热在线视频 | 久久久久国产精品免费免费搜索 | 一级做受毛片免费大片 | 久久免费精品 | 丝袜毛片| 亚洲精品欧洲 | 日本一级淫片免费啪啪3 | 国产成人一区二区三区久久久 | 成人欧美一区二区三区 | 久久中文字幕一区 | 国产一区二区在线视频 | 日韩精品视频一区二区三区 | 天天拍夜夜爽 | 欧美aaaaa| 免费在线观看av片 | 青青久久久 | 亚洲一区二区三区四区五区午夜 |