亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于HTML5的交互Web3D的實現(xiàn)

        2020-04-20 11:48:27錢鑫博
        計算機與網(wǎng)絡(luò) 2020年1期

        錢鑫博

        摘要:針對網(wǎng)頁瀏覽器需要安裝額外插件顯示3D圖形場景和數(shù)據(jù)及時通信交互的問題,利用HTML5新標準中Canvas繪制圖形的方法,采用WebGL提供的硬件3D加速渲染,不需要安裝第三方插件就可實現(xiàn)在瀏覽器里流暢地展示3D場景和模型。通過HTML5的WebSocket技術(shù)形成瀏覽器與服務(wù)端之間的快速雙向通道,實現(xiàn)實時的雙向TCP通信,利用這些關(guān)鍵技術(shù)最終實現(xiàn)了一個交互的Web3D展示系統(tǒng)。

        關(guān)鍵詞:Web3D實現(xiàn);HTML5技術(shù);WebGL技術(shù);WebSocket

        中圖分類號:TP391文獻標志碼:A文章編號:1008-1739(2020)01-60-4

        0引言

        自互聯(lián)網(wǎng)誕生以來,如何使網(wǎng)頁變得更生動更強大是人們一直在追求的目標。隨著Web技術(shù)的發(fā)展,F(xiàn)lash的出現(xiàn)使得網(wǎng)絡(luò)3D動畫逐漸流行起來,產(chǎn)生了很多令人印象深刻的動畫效果。但是Flash有一個缺點,需要安裝Flash Player瀏覽器插件,安全性也備受質(zhì)疑。微軟發(fā)明了Silverlight,但是也需要安裝插件,跨平臺安裝插件尤其是嵌入式設(shè)備會使得客戶的體驗變差。

        HTML語言演化的目的是為了實現(xiàn)更豐富的圖形化界面和更友好的人機交互。HTML5的出現(xiàn)提供了許多新標簽[1],使得頁面上內(nèi)容的交互性得到了增強。通過HTML5支持的JavaScript腳本[2]語言,可以實現(xiàn)網(wǎng)絡(luò)交互式3D場景,這個接口就是WebGL,它呈現(xiàn)3D場景時使用顯卡的底層圖形硬件加速,能夠保證繪制效率,而且接口是標準的、跨平臺的。用WebGL技術(shù)制作的Web交互式3D動畫與Flash,Silverlight等相比,可達到同樣效果,最重要的是無需安裝任何瀏覽器插件,幾乎不用修改就能以同樣的方式運行在多種平臺上。

        1 WebGL技術(shù)

        以往的技術(shù)在瀏覽器中進行3D展示是一件非常困難的事情,由于3D圖形的渲染計算量巨大,導(dǎo)致了顯示非常緩慢,直到提供硬件3D加速渲染的繪圖標準WebGL的誕生。在HTML5提供的Canvas標簽[3]里,設(shè)計開發(fā)人員可以使用WebGL精確控制到頁面的每個像素,這樣就能創(chuàng)建復(fù)雜3D結(jié)構(gòu)和數(shù)據(jù)可視化應(yīng)用。因為WebGL是直接工作在顯卡的圖形處理器層面,充分發(fā)揮了硬件的性能,使得在瀏覽器里展示的3D場景和模型能達到流暢運行[4]。

        在WebGL中編程是通過JavaScript語言編寫程序來實現(xiàn)。程序里通常的目標都是要繪制渲染某種場景。3D圖形系統(tǒng)用于繪制模型最基本的元素是三角形,這些繪制信息包括三角形的繪制位置、顏色、形狀和紋理等。顯卡的圖形處理器并行的渲染操作稱之為繪制調(diào)用(Draw Call),這些調(diào)用都是利用渲染管線(Rendering Pipeline)的處理流程來實現(xiàn)的[5],渲染管線流程如圖1所示。

        渲染管線渲染的具體流程如下:

        (1)建立頂點數(shù)組

        渲染管線進行處理,先要建立頂點數(shù)組(Vertex Array)。頂點數(shù)組包括各種屬性信息,例如頂點紋理、顏色、光照方向和頂點在3D空間中的位置,這些數(shù)據(jù)主要包括Attribute變量和Uniform變量。Attribute變量存儲著關(guān)于點本身的數(shù)據(jù),其中最重要的是點的位置及頂點顏色等信息,作為頂點數(shù)組的一部分傳進頂點著色器。Uniform變量用來修飾繪制過程中一直不變的全局變量,比如變換矩陣、光源位置等。此外還需要有一個數(shù)組用于存放頂點數(shù)組中元素的索引,作用是控制頂點組合到三角形里。

        (2)頂點著色器將數(shù)組連接成三角形

        頂點著色器(Vertex Shader)最主要的功能是計算頂點在屏幕上空間里的位置。頂點著色器讀取頂點屬性,并輸出一個新的屬性集合,而且會為每個頂點生成其他屬性,比如顏色或紋理坐標。顯卡的圖形處理器從頂點數(shù)組的緩沖中讀取頂點信息后在頂點著色器中處理這些信息,并且會根據(jù)頂點索引數(shù)組里的描述,把這些頂點按照指定的順序每3個點形成一個三角形。頂點著色器計算出每個頂點的值(比如紋理坐標、顏色等),然后把它們寫到Varying變量中。

        (3)光柵器融合

        光柵器(Rasterizer)的作用是過濾每一個三角形,只留下需要的可見形狀的部分進行融合,最后再填充到像素大小的片元(Fragment)中。頂點著色器利用頂點屬性里保存的顏色和紋理數(shù)據(jù),為每個頂點分配了一個顏色值,光柵器將會在三角形表面上做線性插值混合這些顏色,為每一個片元(像素)產(chǎn)生一個平滑的漸變色。

        (4)片元著色器處理

        片元著色器的作用是處理由上一階段生成的每個片元,計算出每個像素的最終顏色。像素大小的片元被輸送到片元著色器(Fragment Shader)中。片元著色器會為每個像素進行獨立繪制,包括紋理映射和光照。片元著色器將會生成每個像素的顏色和深度值,為下一步在幀緩沖(Frame Buffer)中進行繪制提供了數(shù)據(jù)支持。

        (5)幀緩沖處理

        幀緩沖包含一個或多個顏色緩沖區(qū),還包含模板緩沖區(qū)(Stencil Buffer)和深度緩沖區(qū)(Depth Buffer)。模板緩沖區(qū)的作用就是用規(guī)定的形狀約束幀緩沖中的可繪制區(qū)域。深度緩沖區(qū)的作用是把已經(jīng)在前面繪制的物體,擋住后面物體的部分忽略掉。經(jīng)過模板緩沖區(qū)和深度緩沖區(qū)過濾之后依然存在的就是要保留的,這些保留的顏色值與被它覆蓋的顏色值進行混合運算。最終的顏色值、模板值和深度值會保存到相應(yīng)的緩沖區(qū),然后被硬件設(shè)備輸出到顯示器上。

        總體來說,WebGL的接口靈活、功能強大,但是比較底層,開發(fā)難度較大。目前,已經(jīng)有很多專業(yè)人士把它們封裝成了很多很好用的WebGL框架庫,使用起來很方便。

        2 Websocket

        在瀏覽器和服務(wù)器的通信中,通過HTTP僅能實現(xiàn)請求/響應(yīng)模式通信,客戶端加載一個網(wǎng)頁,加載完畢后直到用戶再次發(fā)送請求之前,網(wǎng)頁數(shù)據(jù)不會有任何更新。為了保持通信,有2種常見方法。①輪詢技術(shù):客戶端以一定的間隔向服務(wù)端發(fā)出請求,保持客戶端和服務(wù)器端的聯(lián)系,導(dǎo)致有可能服務(wù)器端的數(shù)據(jù)不能及時更新到客戶端,或者一直沒有數(shù)據(jù)更新,但客戶端總發(fā)出請求,帶來很多無用的網(wǎng)絡(luò)傳輸。②COMET:可以一定程度上模擬雙向通信,客戶端會在處理完服務(wù)器返回的信息后,再次發(fā)出請求,重新建立連接。服務(wù)器端保存信息直到客戶端重新建立連接,客戶端會一次性把當前服務(wù)器端所有的信息取回,在此期間服務(wù)器端會阻塞請求直到有數(shù)據(jù)或超時才返回。但是,這些方案都有一個共同的問題是單向通信,并且?guī)в蠬TTP的開銷,這就導(dǎo)致這些方案不適用于低延遲應(yīng)用。

        W3C為HTML5定義了WebSocket協(xié)議,只需要通過一次握手[6],就會形成一個瀏覽器和服務(wù)端之間的快速雙向通道。WebSocket稱為網(wǎng)絡(luò)TCP,包括通信協(xié)議格式和編程API,建立連接后就可以使數(shù)據(jù)直接在二者之間相互傳送。

        Chrome瀏覽器里嗅探的握手通信過程如下:由客戶端發(fā)起請求連接,服務(wù)器端進行響應(yīng)識別,服務(wù)端用請求連接中的“Sec-WebSocket-Key”值來構(gòu)造出一個SHA-1的信息摘要。它的構(gòu)造過程是用隨機生成的“Sec-WebSocket-Key”進行SHA-1加密再進行BASE-64編碼,將計算的結(jié)果做為“Sec-WebSocket-Accept”Header頭的值,發(fā)送給客戶端驗證。如果正確,客戶端和服務(wù)器端就可以通過TCP連接直接交換數(shù)據(jù)。這讓瀏覽器實現(xiàn)了實時通信能力。有了WebSocket就可以擴展Web應(yīng)用程序,使得程序基于事件的方式觸發(fā),增強了實時交互性,提高了應(yīng)用程序的性能。

        3原型系統(tǒng)實現(xiàn)

        3.1系統(tǒng)結(jié)構(gòu)

        原型系統(tǒng)實現(xiàn)了一個交互的Web3D系統(tǒng)來展現(xiàn)HTML5給Web領(lǐng)域帶來的巨大變化,系統(tǒng)結(jié)構(gòu)如圖2所示。

        功能上主要實現(xiàn)了遠程數(shù)據(jù)采集終端采集原始數(shù)據(jù),通過Socket連接發(fā)送到服務(wù)端。服務(wù)端部分采用Java,C#,Node.js[7]等語言實現(xiàn)。服務(wù)端響應(yīng)客戶端的請求,并通過與服務(wù)端之間建立的WebSocket雙向TCP通道,把得到的數(shù)據(jù)信息實時推送到客戶端,最終把數(shù)據(jù)展示在瀏覽器的3D界面里。

        3.2實現(xiàn)效果

        通過Web3D可以在瀏覽器端構(gòu)建較為原始的三維模型,如果用三維建模去接近現(xiàn)實世界中的形體和外觀是不現(xiàn)實的,現(xiàn)實世界中的物體往往是非常復(fù)雜的。繪制細節(jié)將給3D建模帶來巨大的工作量,同時會導(dǎo)致加載模型緩慢。這就要在模型的外觀紋理上想辦法,而不用去追求模型的高精細度。尤其是3D模型用真實物體的圖片作為模型紋理,效果馬上就會很接近真實物體。

        貼在模型表面的圖片不是普通的圖片,需要用UV貼圖。UV貼圖是經(jīng)過類似極坐標變換后的圖片,把三維圖展開變換成二維圖。UV圖的制作可以借用一些軟件工具完成[8]。在實際的展示系統(tǒng)中,繪制的一座3D山地地形的效果如圖3所示。

        按住鼠標移動,3D模型會隨著場景視角轉(zhuǎn)動,轉(zhuǎn)動后可以看到其他方向的貼圖渲染效果。采集端通過服務(wù)器把消息轉(zhuǎn)發(fā)推送到客戶端,如圖4所示。

        采集端把采集到的數(shù)據(jù)發(fā)送到服務(wù)器,服務(wù)端通過WebSocket和瀏覽器建立實時通道,把消息推送到客戶端瀏覽器上相應(yīng)的位置。鼠標移動到標注上會顯示提示窗口,提示窗口把遠程接收到的數(shù)值信息展示出來,而且實時更新數(shù)據(jù)。

        4結(jié)束語

        HTML5標準的出現(xiàn),將以前復(fù)雜的需要大量代碼才能實現(xiàn)的功能,定義為標簽元素,只需設(shè)置好標簽的屬性即可實現(xiàn)相應(yīng)的功能;HTML5提供了支持WebGL標準化的繪制3D圖形的方法,還改變了數(shù)據(jù)的傳輸方式,讓用戶可以實時地和服務(wù)端進行交互,并且將瀏覽器作為一種通用的平臺后,不用安裝專用的軟件就能實現(xiàn)在任何地方進行跨平臺操作。客戶端零維護,系統(tǒng)的擴展也非常容易。

        參考文獻

        [1]徐佩鋒.基于Flash的Web3D開發(fā)方法研究[J].價值工程, 2010,29(32):179-180.

        [2] FLANAGAN D.JavaScript權(quán)威指南[M].北京:機械工業(yè)出版社,2003.

        [3]李慧云,何震葦,李麗,等.HTML5技術(shù)與應(yīng)用模式研究[J].電信科學,2012,28(5):24-29.

        [4]譚文文,丁世勇,李桂英.基于webGL和HTML5的網(wǎng)頁3D動畫的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2011,7(28): 6981-6983.

        [5]阿尤魯.WebGL高級編程—開發(fā)Web3D圖形[M].北京:人民郵電出版社,2013.

        [6] LENGSTORF J,LEGGETTER P.構(gòu)建實時Web應(yīng)用:基于 HTML5 WebSocket、PHP和jQuery[M].北京:機械工業(yè)出版社,2013.

        [7] BYVoid.Node.js開發(fā)指南[M].北京:人民郵電出版社,2012.

        [8]陳煜,殷鳳華.基于開源Web 3D引擎的三維系統(tǒng)的開發(fā)[J].軟件導(dǎo)刊,2011,10(2):150-152.

        99蜜桃在线观看免费视频网站| 久久老熟女一区二区三区| 国产精品国产三级国产剧情| 亚洲国产精品一区二区成人片国内 | 91免费国产高清在线| 一区二区三区日韩毛片| 日韩av一区二区三区激情在线| 粗大的内捧猛烈进出少妇| 性生交大全免费看| 亚洲tv精品一区二区三区| 日本少妇比比中文字幕| 一区二区视频在线国产| 97在线视频人妻无码| 一边吃奶一边摸做爽视频| 大陆一级毛片免费播放| 亚洲中文字幕黄色小视频| 久久99人妖视频国产| 久久亚洲中文字幕精品一区| 一性一交一口添一摸视频| 国产91吞精一区二区三区| 精品蜜桃一区二区三区| 在线精品国产亚洲av麻豆| 领导边摸边吃奶边做爽在线观看 | 精品亚洲一区二区三区四区五区| 无码av一区二区大桥久未| 国产亚洲精品久久久久秋霞| 欧美一级鲁丝片免费一区| 日韩精品免费av一区二区三区 | 国产精品丝袜美女久久| 丰满女人猛烈进入视频免费网站| 丰满少妇三级全黄| 国产自产精品露脸刺激91在线| 国产三级自拍视频在线| 久久久国产精品黄毛片| 无码国产色欲xxxx视频| 久久这里只精品国产免费10| 一区二区三区国产97| 高清不卡日本v二区在线| 中文字幕亚洲综合久久菠萝蜜| 日日碰狠狠躁久久躁96avv| 黄片在线观看大全免费视频|