vivo官網(wǎng) Web 3D 實戰(zhàn)
作者:vivo 官網(wǎng)商城前端團隊-Ni Huaifa
一、 前言

前言 2D數(shù)據(jù)可視化 3D(2D+1D)數(shù)據(jù)可視化 vivo官網(wǎng)3D應用實戰(zhàn) 總結
二、 2D數(shù)據(jù)可視化
2D數(shù)據(jù)可視化是指利用二維平面圖表對數(shù)據(jù)進行組織處理、呈現(xiàn)的一種方式。講到圖表,大家首先想到的可能是我們?nèi)粘S眠^柱狀圖,折線圖等展示形式的圖表圖形。比如下面這種:


三、3D(2D+1D)數(shù)據(jù)可視化
3D數(shù)據(jù)可視化可以理解為在2D數(shù)據(jù)可視化的基礎上增加了Z軸的維度,使數(shù)據(jù)呈現(xiàn)從二維平面擴展到三維立體結構。是一種新的管理、分析和交互數(shù)據(jù)的方式,并且能實現(xiàn)實時反射、實時折射、動態(tài)陰影等高品質,逼真實時渲染3D圖像。

目前可見的3D數(shù)據(jù)可視化應用領域有智慧城市、汽車、手機模型展示等。


1)JavaScript: 處理著色器需要的頂點坐標、法向量、顏色、紋理等信息,并為頂點著色器提供這些數(shù)據(jù) 2)頂點著色器: 接收 JavaScript 傳遞過來的頂點信息,將頂點繪制到對應坐標 3)光柵化階段: 將圖形內(nèi)部區(qū)域用空像素進行填充 4)片元著色器: 為圖形內(nèi)部的像素填充顏色信息 5)渲染: 渲染到Canvas對象
四、vivo官網(wǎng)3D應用實戰(zhàn)
利用渲染庫進行模型的渲染實現(xiàn)可以大大降低我們的學習成本,并且能夠完成WebGL所能實現(xiàn)的幾乎一切功能。常用的一些3D渲染庫有:ThreeJs、BabylonJS、SceneJS以及CesiumJs;

模型文件其實是一個包含了頂點坐標、索引(index)、UV、法線、節(jié)點關系、材質、貼圖、動畫等信息的數(shù)據(jù)集合。不論模型格式如何,但是其本質就是對上述信息的編排和組織。各種模型之間的區(qū)別無非是組織的方式不同,有些用純文本(OBJ),有些用json(GLTF),有些用二進制(FBX)。



1)OBJ模型對于動畫的支持不是特別友好,而手機在做3D展示時需要進行一些模型的拆解動畫展示。
2)FBX 由于不同引擎解析的規(guī)范不同,導致不同引擎渲染出的效果差別較大
3)GLTF(GLB) 模型格式擴展性較高,ThreeJs、Babylonjs等WebGL渲染引擎的支持性較好



平行光是朝著某個方向照射的光,光線中的每一個光子與其它光子都是平行運動的。舉個例子,陽光就可以認為是平行光,平行光只能照亮物體的一部分表面。



let texture = await Loader.loadImg(panoramicImg)texture.encoding = THREE.sRGBEncodinglet sphereGeometry = new THREE.SphereGeometry(3000, 160, 160)sphereGeometry.scale(-1, 1, 1)let sphereMaterial = new THREE.MeshBasicMaterial({ map: texture })let sphere = new THREE.Mesh(sphereGeometry, sphereMaterial)// 設置材質對象的紋理貼圖this.bgMap = spherethis.stage.scene.add(this.bgMap)
npm install -g gltf-pipeline
Converting a glTF to glbgltf-pipeline -i model.gltf -o model.glbgltf-pipeline -i model.gltf -b

// Instantiate a loaderconst loader = new GLTFLoader();// Optional: Provide a DRACOLoader instance to decode compressed mesh dataconst dracoLoader = new DRACOLoader();dracoLoader.setDecoderPath( '/examples/js/libs/draco/' );loader.setDRACOLoader( dracoLoader );
五、總結
看完兩件事
如果你覺得這篇內(nèi)容對你挺有啟發(fā),我想邀請你幫我兩件小事
1.點個「在看」,讓更多人也能看到這篇內(nèi)容(點了「在看」,bug -1 ??)
評論
圖片
表情
