vue3項目中使用three.js的操作步驟
前言
在vue3項目中,通過three.js使用瞭一段短小但完整的代碼實現瞭實際的三維效果圖。
一、three.js是什麼?
Three.js是一個輕量級,跨平臺的Javascript庫,可以在瀏覽器上結合HTML5的canvas,SVG或者WebGL,創建和展示3D模型和動畫。
Three.js允許我們在不依賴任何瀏覽器插件的情況下,創建一個GPU加速的3D動畫場景。
二、vue3中下載與安裝three.js
1.利用npm安裝three.js:
npm install three
2.npm安裝軌道控件插件:
npm install three-orbit-controls
3.安裝加載.obj和.mtl文件的插件:
npm i --save three-obj-mtl-loader
4.安裝渲染器插件:
npm i --save three-css2drender
安裝好後在需要調用的vue文件中引用:
import * as Three from 'three'
三、操作步驟
場景——相機——渲染器是在Three.js中必不可少的三要素,隻有以上三者結合才能渲染出可見的內容。
1.創建場景
//創建一個三維場景 const scene = new THREE.Scene();
2.創建物體
const geometry = new THREE.BoxGeometry(100, 100, 100);//長寬高都是100的立方體 // const geometry = new THREE.SphereGeometry(60,40,40);//半徑是60的圓 //widthSegments, heightSegments:水平方向和垂直方向上分段數。widthSegments最小值為3,默認值為8。heightSegments最小值為2,默認值為6。 //創建材質(外觀) const material = new THREE.MeshLambertMaterial({ // color: 0x0000ff,//設置材質顏色(藍色) color: 0x00ff00,//(綠色) transparent: true,//開啟透明度 opacity: 0.5 //設置透明度 }); //創建一個網格模型對象 const mesh = new THREE.Mesh(geometry, material);//網絡模型對象Mesh //把網格模型添加到三維場景 scene.add(mesh);//網絡模型添加到場景中
3.添加光源
//添加光源 //會照亮場景裡的全部物體(氛圍燈),前提是物體是可以接受燈光的,這種燈是無方向的,即不會有陰影。 const ambient = new THREE.AmbientLight(0xffffff, 0.4); const light = new THREE.PointLight(0xffffff, 1);//點光源,color:燈光顏色,intensity:光照強度
4.添加相機
//創建一個透視相機,窗口寬度,窗口高度 const width = window.innerWidth, height = window.innerHeight; const camera = new THREE.PerspectiveCamera(45, width/height, 1, 1000); //設置相機位置 camera.position.set(300,300,300); //設置相機方向 camera.lookAt(0,0,0);
5.開始渲染
//創建一個WebGL渲染器 const renderer = new THREE.WebGLRenderer() renderer.setSize(width,height)//設置渲染區尺寸 renderer.render(scene,camera)//執行渲染操作、指定場景、相機作為參數
四、myThree.vue源代碼
說瞭這麼多,現奉上myThree.vue源代碼:
<template> <div id="my-three"></div> </template> <script lang='ts' setup> import * as THREE from 'three' import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' import { onMounted } from 'vue' //創建一個三維場景 const scene = new THREE.Scene(); //創建一個物體(形狀) const geometry = new THREE.BoxGeometry(100, 100, 100);//長寬高都是100的立方體 // const geometry = new THREE.SphereGeometry(60,40,40);//半徑是60的圓 //widthSegments, heightSegments:水平方向和垂直方向上分段數。widthSegments最小值為3,默認值為8。heightSegments最小值為2,默認值為6。 //創建材質(外觀) const material = new THREE.MeshLambertMaterial({ // color: 0x0000ff,//設置材質顏色(藍色) color: 0x00ff00,//(綠色) transparent: true,//開啟透明度 opacity: 0.5 //設置透明度 }); //創建一個網格模型對象 const mesh = new THREE.Mesh(geometry, material);//網絡模型對象Mesh //把網格模型添加到三維場景 scene.add(mesh);//網絡模型添加到場景中 // 添加多個模型(添加圓形) // const geometry2 = new THREE.SphereGeometry(60, 40, 40); // const material2 = new THREE.MeshLambertMaterial({ // color: 0xffff00 // }); // const mesh2 = new THREE.Mesh(geometry2, material2); //網格模型對象Mesh // // mesh3.translateX(120); //球體網格模型沿Y軸正方向平移120 // mesh2.position.set(120,0,0);//設置mesh3模型對象的xyz坐標為120,0,0 // scene.add(mesh2); //添加光源 //會照亮場景裡的全部物體(氛圍燈),前提是物體是可以接受燈光的,這種燈是無方向的,即不會有陰影。 const ambient = new THREE.AmbientLight(0xffffff, 0.4); const light = new THREE.PointLight(0xffffff, 1);//點光源,color:燈光顏色,intensity:光照強度 scene.add(ambient); light.position.set(200,300,400); scene.add(light); //創建一個透視相機,窗口寬度,窗口高度 const width = window.innerWidth, height = window.innerHeight; const camera = new THREE.PerspectiveCamera(45, width/height, 1, 1000); //設置相機位置 camera.position.set(300,300,300); //設置相機方向 camera.lookAt(0,0,0); //創建輔助坐標軸 const axesHelper = new THREE.AxesHelper(200);//參數200標示坐標系大小,可以根據場景大小去設置 scene.add(axesHelper); //創建一個WebGL渲染器 const renderer = new THREE.WebGLRenderer() renderer.setSize(width,height)//設置渲染區尺寸 renderer.render(scene,camera)//執行渲染操作、指定場景、相機作為參數 const controls = new OrbitControls(camera, renderer.domElement)//創建控件對象 controls.addEventListener('change',()=>{ renderer.render(scene, camera)//監聽鼠標,鍵盤事件 }) onMounted(()=>{ document.getElementById('my-three')?.appendChild(renderer.domElement) }) </script> <style lang='scss'> body{ margin: 0; padding: 0; } </style>
五、效果圖
1.單個模型
2.多個模型
總結
在vue3項目中,通過three.js實現瞭實際的三維效果demo,未來會繼續深入研究,總之3D渲染圖形是一個很好玩的東西,歡迎大傢一起交流。
到此這篇關於vue3項目中使用three.js的文章就介紹到這瞭,更多相關vue3使用three.js內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- three.js實現3d全景看房示例
- Three.js物理引擎Cannon.js創建簡單應用程序
- React + Threejs + Swiper 實現全景圖效果的完整代碼
- three.js簡單實現類似七聖召喚的擲骰子
- javascript Three.js創建文字初體驗