vivo官网 Web 3D 实战
作者:vivo 官网商城前端团队-Ni Huaifa
一、 前言
前言 2D数据可视化 3D(2D+1D)数据可视化 vivo官网3D应用实战 总结
二、 2D数据可视化
2D数据可视化是指利用二维平面图表对数据进行组织处理、呈现的一种方式。讲到图表,大家首先想到的可能是我们日常用过柱状图,折线图等展示形式的图表图形。比如下面这种:
三、3D(2D+1D)数据可视化
3D数据可视化可以理解为在2D数据可视化的基础上增加了Z轴的维度,使数据呈现从二维平面扩展到三维立体结构。是一种新的管理、分析和交互数据的方式,并且能实现实时反射、实时折射、动态阴影等高品质,逼真实时渲染3D图像。
目前可见的3D数据可视化应用领域有智慧城市、汽车、手机模型展示等。
1)JavaScript: 处理着色器需要的顶点坐标、法向量、颜色、纹理等信息,并为顶点着色器提供这些数据 2)顶点着色器: 接收 JavaScript 传递过来的顶点信息,将顶点绘制到对应坐标 3)光栅化阶段: 将图形内部区域用空像素进行填充 4)片元着色器: 为图形内部的像素填充颜色信息 5)渲染: 渲染到Canvas对象
四、vivo官网3D应用实战
利用渲染库进行模型的渲染实现可以大大降低我们的学习成本,并且能够完成WebGL所能实现的几乎一切功能。常用的一些3D渲染库有:ThreeJs、BabylonJS、SceneJS以及CesiumJs;
模型文件其实是一个包含了顶点坐标、索引(index)、UV、法线、节点关系、材质、贴图、动画等信息的数据集合。不论模型格式如何,但是其本质就是对上述信息的编排和组织。各种模型之间的区别无非是组织的方式不同,有些用纯文本(OBJ),有些用json(GLTF),有些用二进制(FBX)。
1)OBJ模型对于动画的支持不是特别友好,而手机在做3D展示时需要进行一些模型的拆解动画展示。
2)FBX 由于不同引擎解析的规范不同,导致不同引擎渲染出的效果差别较大
3)GLTF(GLB) 模型格式扩展性较高,ThreeJs、Babylonjs等WebGL渲染引擎的支持性较好
平行光是朝着某个方向照射的光,光线中的每一个光子与其它光子都是平行运动的。举个例子,阳光就可以认为是平行光,平行光只能照亮物体的一部分表面。
let texture = await Loader.loadImg(panoramicImg)
texture.encoding = THREE.sRGBEncoding
let 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 = sphere
this.stage.scene.add(this.bgMap)
npm install -g gltf-pipeline
Converting a glTF to glb
gltf-pipeline -i model.gltf -o model.glb
gltf-pipeline -i model.gltf -b
// Instantiate a loader
const loader = new GLTFLoader();
// Optional: Provide a DRACOLoader instance to decode compressed mesh data
const dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath( '/examples/js/libs/draco/' );
loader.setDRACOLoader( dracoLoader );
五、总结
看完两件事
如果你觉得这篇内容对你挺有启发,我想邀请你帮我两件小事
1.点个「在看」,让更多人也能看到这篇内容(点了「在看」,bug -1 😊)
评论