一、引言

本文将介绍如何在Vue3项目中集成ThreeJS,并加载外部gltf格式的3D模型,以打造更具视觉冲击力和立体感的数据大屏展示。 444444.png

二、实践步骤

1. 项目初始化

首先,在Vue3项目中安装ThreeJS。使用npm或yarn进行安装:

bash

代码解读
复制代码
npm install three

同时,由于我们需要加载gltf格式的3D模型,还需要安装相关的加载器:

bash

代码解读
复制代码
npm install three/examples

2. 准备gltf模型文件

GLTF(GL Transmission Format)是一种基于JSON的3D模型格式,用于描述3D模型的几何形状、纹理、材质和动画等信息。由于其跨平台性,GLTF模型可以在任何支持JSON的平台上使用,包括Web浏览器、移动设备、桌面应用程序等。

将gltf模型文件及其相关资源(如纹理图片)放置在Vue项目的public/model目录下。

3. 创建ThreeJS场景

在Vue3组件中,创建一个新的ThreeJS场景。在组件的mounted钩子函数中,初始化ThreeJS的场景、相机、渲染器等对象。

javascript

代码解读
复制代码
// 省略了部分代码...  
  
// 创建ThreeJS场景  
const scene = new THREE.Scene();  
  
// 设置相机  
const camera = new THREE.PerspectiveCamera(4, window.innerWidth / window.innerHeight, 1, 1000);  
camera.position.set(0, 0, 100);  
  
// 设置渲染器  
const renderer = new THREE.WebGLRenderer({ antialias: true });  
renderer.setSize(window.innerWidth, window.innerHeight);  
renderer.outputEncoding = THREE.sRGBEncoding;  
  
// 添加窗口调整大小事件监听器  
window.addEventListener('resize', onWindowResize, false);  
  
// 省略了部分代码...  
  
function onWindowResize() {  
    camera.aspect = window.innerWidth / window.innerHeight;  
    camera.updateProjectionMatrix();  
    renderer.setSize(window.innerWidth, window.innerHeight);  
}

4. 编写加载3D模型的方法

使用GLTFLoader加载gltf格式的3D模型。

javascript

代码解读
复制代码
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';  
  
async function loadScene(url) {  
    const loader = new GLTFLoader();  
    loader.load(url, (gltf) => {  
        scene.add(gltf.scene);  
        gltf.scene.position.set(0, -10, 0);  
        gltf.scene.scale.set(0.5, 0.5, 0.5);  
  
        // 添加光源  
        const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);  
        scene.add(ambientLight);  
  
        const directionalLight = new THREE.DirectionalLight(0xffffff, 1);  
        directionalLight.position.set(10, 10, 10);  
        scene.add(directionalLight);  
    });  
}

5. 添加3D模型对象并渲染场景

mounted钩子函数中调用loadScene方法,将3D模型加载到场景中,并设置OrbitControls以实现模型的旋转、缩放和平移操作。

javascript

代码解读
复制代码
import { onMounted, ref } from 'vue';  
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';  
  
// 省略了部分代码...  
  
onMounted(async () => {  
    const canvas = ref(null);  
      
    // 将渲染器的DOM元素添加到Vue组件的模板中  
    if (canvas.value) {  
        canvas.value.appendChild(renderer.domElement);  
    }  
  
    // 加载3D模型  
    loadScene('/model/factory/scene.gltf');  
  
    // 设置OrbitControls  
    const controls = new OrbitControls(camera, renderer.domElement);  
    controls.enableDamping = true; // 阻尼效果  
    controls.dampingFactor = 0.25;  
    controls.screenSpacePanning = false;  
    controls.maxPolarAngle = Math.PI / 2;  
  
    // 渲染循环  
    function animate() {  
        requestAnimationFrame(animate);  
        controls.update();  
        renderer.render(scene, camera);  
    }  
    animate();  
});

在Vue组件的模板中,添加一个div元素作为渲染器的容器:

html

代码解读
复制代码
<template>  
  <div ref="canvas" class="three-canvas"></div>  
</template>  
  
<style scoped>  
.three-canvas {  
  width: 100%;  
  height: 100vh;  
  overflow: hidden;  
}  
</style>

三、结论

通过本文的实践步骤,我们成功地在Vue3项目中集成了ThreeJS,并加载了gltf格式的3D模型。结合Vue3的响应式机制和ThreeJS的强大3D渲染能力,我们可以创建出具有生动、立体展示效果的数据大屏。这不仅提升了数据的可读性,还增强了用户的交互体验

作者:沈麽鬼
链接:https://juejin.cn/post/7427025640766226470
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » Vue3数据大屏 ThreeJS 3D模型加载与展示实践

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载要提取码
百度网盘提取码都是gltf。
分享过期和重复下载怎么办
分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
模型和平台不兼容怎么办
可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
  • 7879会员数(个)
  • 16034资源数(个)
  • 40本周更新(个)
  • 39125 今日更新(个)
  • 1139稳定运行(天)

提供最优质的资源集合

加入VIP
开通VIP 享更多特权,建议使用 QQ 登录
×