TresJS 的设计初衷,就是让 Vue 开发者能更轻松地上手 3D 开发。它沿用大家熟悉的组件、组合式函数等开发思路,大幅降低 Three.js 的学习成本。
作为一款开源库,TresJS 让你可以在 Vue 中用声明式的方式使用 Three.js,直接通过 Vue 组件搭建 3D 场景,同时完整保留 Vue 响应式系统的强大能力。
TresJS 发音为 /tres/,在西班牙语里正是“三”的意思。它基于 Three.js 构建,通过自定义 Vue 3 渲染器,将 Vue 组件直接转换成 Three.js 对象。这套库的核心目标,就是借助 Vue 的响应式机制和组件化架构,降低 Web 3D 开发门槛,同时保持对最新 Three.js 功能的全面兼容。
为什么选择 TresJS?
Three.js 本身是一款功能极强的 3D 库,但学习曲线相对陡峭,对习惯 Vue 这类组件化框架的开发者尤其不友好。而 TresJS 正好填补了这一缺口,主要优势体现在:
🧩 组件化更熟悉 不用再写命令式的 Three.js 代码,直接用 Vue 组件搭建 3D 场景。
⚡ 自带响应式 依托 Vue 响应式系统,轻松实现动态、可交互的 3D 效果。
📦 内置组合式函数 提供实用的组合式函数,封装常见 3D 逻辑与功能,开箱即用。
🎯 声明式开发 只需要描述场景最终效果,不用一步步手动构建和渲染。
🔧 优秀开发体验 支持热更新、TypeScript、Vue DevTools 调试,完整保留 Vue 开发体验。
从命令式到声明式
以前写 Three.js,需要编写大量命令式代码:
const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
const renderer = new THREE.WebGLRenderer()
const geometry = new THREE.BoxGeometry()
const material = new THREE.MeshBasicMaterial({ color: 0x00FF00 })
const cube = new THREE.Mesh(geometry, material)
scene.add(cube)
而使用 TresJS,你只需要写声明式的 Vue 组件:
<template>
<TresCanvas>
<TresPerspectiveCamera :position="[0, 0, 5]" />
<TresMesh>
<TresBoxGeometry />
<TresMeshBasicMaterial :color="0x00FF00" />
</TresMesh>
</TresCanvas>
</template>
这种方式显著降低学习成本,同时又不损失 Three.js 本身的强大功能与灵活性。
✨ create-tres CLI:一键搭建3D项目
以往 TresJS 需手动配置 Vue 环境、安装依赖,步骤繁琐易出错。v5.0 全新推出 create-tres 命令行工具,一条指令快速初始化项目,告别繁琐配置。
npx create-tres my-3d-app
内置灵活配置项,适配各类开发场景:
- 模板选择:支持 Vue+Vite、Nuxt 两种主流方案
- 工具集成:默认搭载 TypeScript、ESLint,保障类型安全与代码规范
- 生态拓展:一键引入 Cientos、Post-processing、Leches 等官方工具包
大幅缩减环境搭建耗时,让开发者专注3D场景开发。
🚀 实验性WebGPU支持:高性能渲染升级
传统WebGL难以支撑复杂3D场景,WebGPU作为下一代图形API,具备高性能、低延迟、支持GPU计算着色器的优势。TresJS v5.0 正式接入WebGPU实验性支持,简单配置即可启用。
const createWebGPURenderer = (ctx) =>
new WebGPURenderer({ canvas: ctx.canvas, alpha: true })