Three.js实现3D效果

504 阅读2分钟

一、项目简介

  1. 项目开发目标
    • 学习用three.js实现各种3D效果
  2. 项目技术栈
    • vue3 + three.js

二、项目初始化

  1. 初始化一个vue3项目
    • 简要介绍vue
      • 一个用于构建用户界面(UI)的渐进式框架
    • 初始化vue3项目(初始化前,要确保已安装node.js)
      • npm create vue@latest image.png image.png
  2. 引入three.js
    • 简要介绍three.js
      • 一个用于创建3D图形的开源JS库
    • 安装three.js
      • npm i three@version --save
        • 查看three.js的版本
          • npm show three versions
    • 引入three.js核心库
      • 引入three.js核心:import * from "three"
    • 引入three.js你需要用到的库
      • 查看three.js的库:
        image.png

三、three.js创建3D案例

  1. 创建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)  
  1. 执行渲染操作
<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>


参考资源: