DGIOT是一个面向物联网的开源数据分析平台,它为用户提供了快速、高效采集、管理和分析物联网设备数据的能力,并具备多种数据处理和可视化展示方式。
DGIOT的安装实例数已经超过 35.2k,用户遍布全球。拿下多个物联网产品的领域赛道冠军。
已承建多个重大国际赛事场馆数字驾驶舱、平安校园数据中台、电信级设备监管平台、千亿级产业大脑等。
全开放源码,全流程低代码。
强大开源社区,集成和兼容各种开源工具。
商业级物联网基座,快速承接物联网项目。
面向工业物联网的轻量级开源平台,致力于平台的标准化和工具化。打造全面、丰富、专业的开源生态产品及服务。
首页 › 技术文章
[小 迪 导读] : 制造了三维立体场景的感觉,能够给用户带来视觉冲击力的体验,同时使数据监测更加的具象化
npm install three --save npm install gsap --save import * as THREE from "three"; import gsap from "gsap";
const scene = new THREE.Scene(); //场景 //相机 const container = this.$refs.container; // 获取实例 var width = container.clientWidth; // 窗口宽度 var height = container.clientHeight; // 窗口高度 var k = width / height; // 窗口宽高比 var s = 300; // 三维场景显示范围控制系数,系数越大,显示的范围越大 // -s * k, s * k, s, -s, 1, 1000 const camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 0.1, 10000); // 相机位置 camera.position.set(-300, 300, -800); // 设置相机位置 camera.lookAt(scene.position); // 设置相机方向(指向的场景对象) //渲染器 const renderer = new THREE.WebGLRenderer({ antialias: true, // 去锯齿 }); renderer.setSize(container.clientWidth, container.clientHeight); renderer.shadowMap.enabled = true; //允许渲染器阴影 // renderer.physicallyCorrectLights = false; renderer.setClearColor(0x838788); // 设置背景颜色
var geometry2 = new THREE.BoxGeometry(300, 2, 300); //几何体创建 const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); //材质 var mesh2 = new THREE.Mesh(geometry2, material); //网格模型对象Mesh mesh2.position.set(-100, 1, -100); //位置设置 scene.add(mesh2); //网格模型添加到场景中 //材质贴图 function loadtexture(url) { var loder = new THREE.TextureLoader(); var texture = loder.load(url); var basicMaterial = new THREE.MeshBasicMaterial({ map: texture, side: THREE.DoubleSide, // 前面FrontSide 背面:BackSide 双面:DoubleSide }); return basicMaterial; //这个就是图片所造的一个面的材料 } var cicle = new THREE.SphereGeometry(60, 60, 60); //球 var material = new THREE.MeshDepthMaterial(loadtexture('http://localhost:5080/dgiot_file/material/test.jpg')); var mesh = new THREE.Mesh(cicle, material); mesh.position.set(300, 350, 100); scene.add(mesh); //网格模型添加到场景中
// 初始化解压模型 const dracoloader = new DRACOLoader(); dracoloader.setDecoderPath("./draco/gltf/"); const gltfloader = new GLTFLoader(); //创建加载器 gltfloader.setDRACOLoader(dracoloader); gltfloader.load("LittlestTokyo.glb", (gltf) => { const model = gltf.scene; mixer = new THREE.AnimationMixer(model); mixer.clipAction(gltf.animations[0]).play(); this.animate(); });
const loader = new FBXLoader();//创建加载器 loader.load( "dancing.fbx", (fbx) => { this.model.fbx = fbx; this.model.fbx.position.set(200, -60, 100); this.model.fbx.scale.set(0.7, 0.7, 0.7); scene.add(this.model.fbx); });
// 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; var controls = new OrbitControls(camera, renderer.domElement); //用户交互 controls.target.set(100, 0, 0); //设置相机的角度范围 controls.maxPolarAngle = Math.PI * 0.5; //设置相机距离原点的最远距离 controls.minDistance = 0; //设置相机距离原点的最远距离 controls.maxDistance = 2000; // 把canvas挂载到container中 container.appendChild(renderer.domElement);
//浏览器自动渲染下一帧
animate() { // 浏览器自动渲染下一帧 controls.update(); const delta = clock.getDelta(); mixer.update(delta); // TWEEN.update(); tween.js是一款可生成平滑动画效果的js动画库 requestAnimationFrame(this.animate); // 渲染到页面 renderer.render(scene, camera); }
let mixer = new THREE.AnimationMixer(); //创建动画混合器(播放器) gltfloader.load("LittlestTokyo.glb", (gltf) => { mixer = new THREE.AnimationMixer(model); //创建动画混合器(播放器)载入模型 mixer.clipAction(gltf.animations[0]).play(); //返回所传入的剪辑参数的AnimationAction, 根对象参数可选,默认值为混合器的默认根对象。第一个参数可以是动画剪辑(AnimationClip)对象或者动画剪辑的名称。 }) const delta = clock.getDelta(); //混合器时间 mixer.update(delta) //推进混合器时间并更新动画
[小 迪 点评]
想了解更多 dgiot 的具体细节,欢迎大家在GitHub上查看相关源代码。
加微信咨询
请填写下面表单,我们的工作人员会与您联系。
报错: 未找到这个表单
请填写下面表单,我们会即时将最新版本下载地址发到您的邮箱。
加小迪为好友即可加入交流群