一、项目简介
- 项目开发目标
- 学习用three.js实现各种3D效果
- 项目技术栈
- vue3 + three.js
二、项目初始化
- 初始化一个vue3项目
- 简要介绍vue
- 一个用于构建用户界面(UI)的渐进式框架
- 初始化vue3项目(初始化前,要确保已安装node.js)
- npm create vue@latest
- npm create vue@latest
- 简要介绍vue
- 引入three.js
- 简要介绍three.js
- 一个用于创建3D图形的开源JS库
- 安装three.js
- npm i three@version --save
- 查看three.js的版本
- npm show three versions
- 查看three.js的版本
- npm i three@version --save
- 引入three.js核心库
- 引入three.js核心:import * from "three"
- 引入three.js你需要用到的库
- 查看three.js的库:
- 查看three.js的库:
- 简要介绍three.js
三、three.js创建3D案例
- 创建3D场景、透视投影相机、渲染器
import * as THREE from 'three';
// 创建3D场景对象Scene
export const scene = new THREE.Scene();
// 创建一个长方体几何对象Geometry
const geometry = new THREE.BoxGeometry(50, 20, 100);
// 创建一个材质对象Material
const material = new THREE.MeshBasicMaterial({
color: 0xff0000, // 设置材质颜色为红色
});
// 两个参数分别为几何体geometry、材质material
const mesh = new THREE.Mesh(geometry, material); // 网格模型对象Mesh
// 设置网格模型在三维空间中的位置坐标,默认是坐标原点
mesh.position.set(0, 10, 0);
scene.add(mesh);
// 定义相机输出画布的尺寸(单位:像素px)
const width = 800; // 宽度
const height = 500; // 高度
// 实例化一个透视投影相机对象
// 30: 视场角度, width / height: Canvas画布宽高比, 1: 近裁截面, 3000:远裁截面
export const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
// 相机在Three.js三维坐标系中的位置
// 根据需要设置相机位置具体值
camera.position.set(0, 200, -100);
// 相机观察目标指向Three.js 3D空间中某个位置
camera.lookAt(0, 0, 0); // 坐标原点
// 创建渲染器对象
export const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height); // 设置three.js渲染区域的尺寸(像素px)
- 执行渲染操作
<template>
<div>
<div id="basic_demo"></div>
</div>
</template>
<script setup>
import { onMounted } from 'vue'
import { scene, camera, renderer } from "./demo/geometry.js"
onMounted(() => {
// 将渲染器的 DOM 元素附加到 basic_demo 元素
document.getElementById('basic_demo').appendChild(renderer.domElement);
// 执行渲染操作
renderer.render(scene, camera);
})
</script>
<style scoped>
</style>
参考资源: