一文详解如何用Three.js和Vue 3实现3D商品展示

 更新时间:2025年07月18日 09:57:40   作者:前端极客探险家  
Three.js是一个基于JavaScript的开源库,用于在网页上创建和显示3D图形,这篇文章主要介绍了如何用Three.js和Vue 3实现3D商品展示的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、前言

在现代电商和产品展示中,3D 可视化技术正变得越来越流行。例如,在购物网站上,用户可以 360° 旋转商品,查看细节,甚至模拟不同的光照和材质效果。这种交互体验可以极大提升用户对商品的感知和购买欲望。

本篇文章将带你使用 Vue 3 + Three.js 构建一个 3D 商品展示组件,并支持 缩放、旋转、光照调整 等功能。

二、Three.js 简介

Three.js 是一个流行的 WebGL 库,提供了丰富的 3D 渲染 API,使前端开发者可以更轻松地在网页中创建 3D 场景。它的核心概念包括:

  • 场景(Scene):3D 物体的容器
  • 相机(Camera):决定观察角度
  • 光源(Lights):控制光照效果
  • 渲染器(Renderer):渲染 3D 画面
  • 模型(Mesh):3D 物体

三、搭建 Vue 3 + Three.js 项目

3.1 创建 Vue 3 项目并安装依赖

# 创建 Vue 3 项目
npm create vite@latest vue-3d-viewer --template vue
cd vue-3d-viewer

# 安装 Three.js
···l three

3.2 创建ThreeDViewer.vue组件

components 目录下创建 ThreeDViewer.vue,并初始化 Three.js 场景。

// ThreeDViewer.vue
<template>
  <div ref="threeContainer" class="three-container"></div>
</template>

<script setup>
import { ref, onMounted } from "vue";
import * as THREE from "three";

const threeContainer = ref(null);

onMounted(() => {
  // 创建场景
  const scene = new THREE.Scene();

  // 创建相机(透视相机)
  const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
  camera.position.set(0, 0, 5); // 设置相机位置

  // 创建渲染器
  const renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  threeContainer.value.appendChild(renderer.domElement);

  // 创建一个立方体
  const geometry = new THREE.BoxGeometry();
  const material = new THREE.MeshStandardMaterial({ color: 0x0077ff });
  const cube = new THREE.Mesh(geometry, material);
  scene.add(cube);

  // 添加光源
  const light = new THREE.AmbientLight(0xffffff, 1);
  scene.add(light);

  // 渲染循环
  function animate() {
    requestAnimationFrame(animate);
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.01;
    renderer.render(scene, camera);
  }
  animate();
});
</script>

<style>
.three-container {
  width: 100%;
  height: 100vh;
  overflow: hidden;
}
</style>

四、加载 3D 商品模型

4.1 安装GLTFLoader

Three.js 使用 GLTFLoader 加载 .gltf.glb 格式的 3D 模型。

npm install three/examples/jsm

4.2 加载 GLTF 模型

修改 ThreeDViewer.vue,使用 GLTFLoader 加载 3D 商品模型。

import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";

// 加载 3D 商品模型
const loader = new GLTFLoader();
loader.load("/models/product.glb", (gltf) => {
  const model = gltf.scene;
  model.scale.set(1, 1, 1); // 调整模型大小
  scene.add(model);
});

五、增加交互功能

5.1 旋转和缩放

使用 OrbitControls 实现 鼠标拖拽旋转和缩放

npm install three-orbitcontrols

5.2 添加OrbitControls

import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";

const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true; // 使旋转更流畅
controls.dampingFactor = 0.05;
controls.screenSpacePanning = false;
controls.minDistance = 1; // 最小缩放距离
controls.maxDistance = 10; // 最大缩放距离

六、添加灯光和阴影

3D 商品的视觉效果很大程度上依赖于 光照,我们可以添加 环境光 + 聚光灯,增强立体感。

// 添加环境光
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight);

// 添加聚光灯
const spotLight = new THREE.SpotLight(0xffffff, 1);
spotLight.position.set(5, 5, 5);
scene.add(spotLight);
{javascript}

并开启阴影:

{javascript}
renderer.shadowMap.enabled = true;
cube.castShadow = true;
cube.receiveShadow = true;
spotLight.castShadow = true;

七、最终效果

至此,我们的 3D 商品展示组件已经具备:

加载 3D 模型(支持 .glb/.gltf

鼠标旋转缩放OrbitControls

光照和阴影(环境光 + 聚光灯)

动画(自动旋转)

你可以在 App.vue 中引入并使用:

// App.vue
<template>
  <ThreeDViewer />
</template>

<script setup>
import ThreeDViewer from "./components/ThreeDViewer.vue";
</script>

八、总结

本篇文章介绍了如何使用 Vue 3 + Three.js 构建一个 3D 商品展示 组件,包括:

  1. Three.js 基础(场景、相机、渲染器)
  2. 加载 3D 商品模型(GLTFLoader)
  3. 添加交互控制(OrbitControls)
  4. 优化灯光和阴影(增强立体感)

你可以在此基础上进一步扩展:

  • 支持多角度切换(多个摄像机)
  • 支持模型变色、换材质
  • 加入 WebAR 进行增强现实展示

到此这篇关于如何用Three.js和Vue 3实现3D商品展示的文章就介绍到这了,更多相关Three.js和Vue3实现3D商品展示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用element组件table表格实现某条件下复选框无法勾选

    使用element组件table表格实现某条件下复选框无法勾选

    这篇文章主要介绍了使用element组件table表格实现某条件下复选框无法勾选问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 基于Vue的侧边目录组件的实现

    基于Vue的侧边目录组件的实现

    这篇文章主要介绍了基于Vue的侧边目录组件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Vue 通过公共字段,拼接两个对象数组的实例

    Vue 通过公共字段,拼接两个对象数组的实例

    今天小编就为大家分享一篇Vue 通过公共字段,拼接两个对象数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 如何取消Vue Watch监听的方法示例

    如何取消Vue Watch监听的方法示例

    在实际项目中,watch 本质上是一种长期订阅关系,如果不加控制,它会在数据变化的整个生命周期内持续触发,这在很多场景下并不是我们想要的,所以我们有时会想取消Vue Watch监听,因此本文给大家介绍了取消Vue Watch监听的方法示例,需要的朋友可以参考下
    2026-01-01
  • Vue3 echarts组件化及使用hook进行resize方式

    Vue3 echarts组件化及使用hook进行resize方式

    这篇文章主要介绍了Vue3 echarts组件化及使用hook进行resize方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 解决vue无法加载文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps1因为在此系统上禁止运行脚本问题

    解决vue无法加载文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps

    这篇文章主要介绍了解决vue无法加载文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps1因为在此系统上禁止运行脚本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue使用JSEncrypt对密码本地存储时加解密的实现

    vue使用JSEncrypt对密码本地存储时加解密的实现

    本文主要介绍了vue使用JSEncrypt对密码本地存储时加解密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Vue动画之第三方类库实现动画方式

    Vue动画之第三方类库实现动画方式

    这篇文章主要介绍了Vue动画之第三方类库实现动画方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue自定义指令使用方法详解

    Vue自定义指令使用方法详解

    这篇文章主要为大家详细介绍了Vue自定义指令的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • vue-quill-editor富文本使用及说明

    vue-quill-editor富文本使用及说明

    文章主要讲述了如何准备CSS文件用于自定义富文本样式,并将其放置在指定目录,同时强调了这是个人经验总结,供参考并鼓励支持站点
    2026-05-05

最新评论