当前位置: 首页 > news >正文

在 Vue 3 + Vite + JavaScript 环境下使用 three.js

在 Vue 3 + Vite + JavaScript 环境下使用 three.js 需要注意的基本要点,重点围绕相机、光源、场景、材质和模型展开:


1. 相机(Camera)

相机决定了场景的渲染视角。常用的是透视相机PerspectiveCamera

import { PerspectiveCamera } from 'three'; const camera = new PerspectiveCamera( 75, // 视角 window.innerWidth / window.innerHeight, // 宽高比 0.1, // 近裁剪面 1000 // 远裁剪面 ); camera.position.set(0, 5, 10); // 设置相机位置

2. 光源(Light)

光源影响场景的明暗和阴影效果。常用光源类型:

import { DirectionalLight, AmbientLight } from 'three'; // 定向光(模拟太阳光) const directionalLight = new DirectionalLight(0xffffff, 1); directionalLight.position.set(5, 10, 7); // 环境光(均匀照亮所有物体) const ambientLight = new AmbientLight(0x404040);

3. 场景(Scene)

场景是3D对象的容器:

import { Scene } from 'three'; const scene = new Scene(); scene.add(camera, directionalLight, ambientLight); // 添加相机和光源

4. 材质(Material)

材质定义物体表面属性:

import { MeshStandardMaterial, MeshBasicMaterial } from 'three'; // 标准材质(支持光照) const material = new MeshStandardMaterial({ color: 0x3498db, roughness: 0.2, }); // 基础材质(无视光照) const basicMaterial = new MeshBasicMaterial({ color: 0xe74c3c });
材质类型特性
MeshBasicMaterial不受光照影响
MeshStandardMaterial支持物理渲染(PBR)

5. 模型(Model)

模型由几何体(Geometry)和材质(Material)组成:

import { Mesh, BoxGeometry } from 'three'; const geometry = new BoxGeometry(1, 1, 1); const cube = new Mesh(geometry, material); scene.add(cube); // 添加到场景
加载外部模型

使用GLTFLoader加载.glb.gltf模型:

import { GLTFLoader } from 'three/addons/GLTFLoader.js'; const loader = new GLTFLoader(); loader.load('model.glb', (gltf) => { scene.add(gltf.scene); });

完整示例(Vue 3 组件)

<script setup> import * as THREE from 'three'; import { OrbitControls } from 'three/addons/OrbitControls.js'; import { GLTFLoader } from 'three/addons/GLTFLoader.js'; import { onMounted, ref } from 'vue'; const canvasRef = ref(null); onMounted(() => { // 初始化场景 const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer({ canvas: canvasRef.value }); // 添加光源 const light = new THREE.DirectionalLight(0xffffff, 1); light.position.set(0, 10, 10); scene.add(light); // 添加立方体 const geometry = new THREE.BoxGeometry(1, 1, 1); const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube); // 加载外部模型 const loader = new GLTFLoader(); loader.load('robot.glb', (gltf) => { scene.add(gltf.scene); }); // 渲染循环 const animate = () => { requestAnimationFrame(animate); cube.rotation.x += 0.01; renderer.render(scene, camera); }; animate(); }); </script> <template> <canvas ref="canvasRef" width="800" height="600"></canvas> </template>

关键注意事项

  1. Vite 插件支持
    安装vite-plugin-three或配置vite.config.js处理 three.js 模块:

    npm install three @tresjs/vite-plugin
  2. 资源销毁
    在组件卸载时释放资源:

    onUnmounted(() => { renderer.dispose(); geometry.dispose(); material.dispose(); });
  3. 响应式适配
    监听窗口变化更新相机和渲染器:

    window.addEventListener('resize', () => { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); });

通过以上结构化的实现,可在 Vue 3 项目中高效集成 three.js 的 3D 渲染能力。

http://www.jsqmd.com/news/617060/

相关文章:

  • 终极第七史诗自动化脚本配置指南:从零到精通的5个核心技巧
  • XUnity.AutoTranslator:打破语言障碍的终极Unity游戏翻译解决方案
  • 如何轻松实现智慧树课程自动化学习:Autovisor完整指南
  • 轻量高效的动态指针数组CPtrArray实现
  • 2026年节能平板灯推荐:高效照明方案精选 - 品牌排行榜
  • 计算机系统基础知识(十五):软件篇之计算机语言详解
  • C++的std--ranges算法并行执行数据分区算法与负载均衡在异构硬件
  • 当你的 Agent 会“多轮思考”,Trace 却还停留在单轮:阿里云 CMS OpenClaw 可观测插件升级
  • 3分钟上手:用LrcHelper下载网易云音乐双语歌词,完美适配索尼Walkman
  • 哔哩下载姬DownKyi:5分钟快速上手,解锁B站视频离线观看的终极秘籍
  • 告别PDF处理噩梦:Poppler for Windows的零配置革新之道
  • 基于单片机的水族箱控制装置设计(有完整资料)
  • 2026专业的防潮箱厂家:技术沉淀与行业应用解析 - 品牌排行榜
  • Poppler Windows预编译二进制包:深度解析PDF处理工具链架构
  • 2026 年 Java 学习网站深度评测|为什么首选慕课网?
  • FP6291升压芯片:升压5V/7.4V/12V,适配智能门锁供电需求
  • TP8318内置 MOS 平均电流型 LED 降压恒流驱动器
  • JetBrains IDE试用期重置工具:开发者的时间管理神器
  • 数据库课程设计智能化:Qwen3.5-2B辅助ER图设计与SQL语句生成
  • NCMDump终极指南:3分钟解锁网易云音乐NCM格式,让音乐真正属于你
  • LFM2.5-1.2B-Thinking-GGUF效果展示:自动生成软件测试用例与报告
  • PHP微服务容器化部署终极适配方案(Swoole 5.0 + Docker + Kubernetes):含CI/CD流水线YAML模板及健康检查脚本
  • 2026年苏州国际外语学校选择参考 - 品牌排行榜
  • 2026昆山找靠谱律师哪里找?专业法律服务选择参考 - 品牌排行榜
  • 效果实测:Granite-4.0-H-350M在摘要生成中的惊艳表现
  • Qwen3-VL-8B开源镜像实操手册:从零部署高性能AI对话系统(含vLLM优化)
  • DeepSeek-R1-Distill-Llama-8B在智能家居中的语音交互方案
  • 告别复杂配置!MiniCPM-V-2_6通过Ollama一键部署,新手友好
  • BGE-M3开源嵌入模型实操手册:GPU加速+FP16推理+多语言支持
  • Zotero-GPT终极指南:如何在3分钟内完成AI文献助手配置