前言:
页面渲染3D特效,可以从各种图表库(例如ECharts)中寻找各种适用的模版,也可以寻找第三方插件。。。
一直以来都对three.js充满向往,终于偷闲找了个借口学了起来
参考资料
Three.js – JavaScript 3D Libraryhttps://threejs.org/Three.js中文网提供Three.js、WebGL视频课程http://www.webgl3d.cn/项目环境介绍:vue3+ts+vite
一、安装
yarn add three
yarn add @types/three -D
二、引用
1、安装成功后,首先在env.d.ts同级目录下创建three.d.ts,并且申明下载文件
declare module 'three'
declare module 'three/addons/controls/OrbitControls.js'
三、简单使用
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import * as THREE from 'three'
// 导入轨道控制器
import { OrbitControls } from 'three/addons/controls/OrbitControls.js'const container = ref<HTMLDivElement>()// 创建场景
const scene = new THREE.Scene()// 创建相机对象
const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000
)
// 设置相机位置
camera.position.set(0, 0, 10)
scene.add(camera)// 添加物体
// 创建几何体
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1)
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 })
// 根据几何体和材质创建物体
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)
// 修改元素位置
// cube.position.x = 2
// 缩放
// cube.scale.x = 2
// 旋转
cube.rotation.set(Math.PI / 4, 0, 0, 'XYZ')
// 将几何体添加到场景中
scene.add(cube)// 初始化渲染器
const renderer = new THREE.WebGLRenderer()
renderer.setClearColor(new THREE.Color(0xeeeeee))
// 设置three.js渲染区域的尺寸(像素px)
renderer.setSize(window.innerWidth, window.innerHeight)// 创建控制器
const controls = new OrbitControls(camera, renderer.domElement)// 坐标轴
const axesHelper = new THREE.AxesHelper(10)
scene.add(axesHelper)
// 渲染
const render = () => {controls.update()renderer.render(scene, camera) // 执行渲染操作requestAnimationFrame(render)
}onMounted(() => {container.value?.appendChild(renderer.domElement)render()
})
</script><template><div ref="container" class="container"></div>
</template>
<style scoped lang="scss">
.container {height: 100%;width: 100%;
}
</style>