vue3项目中使用three.js的操作步骤

 更新时间:2023年01月15日 16:28:10   作者:犬莱八荒  
最近在学习Three.js相关的技术,恰逢Vue 3.0正式版也已推出,下面这篇文章主要给大家介绍了关于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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue eventBus事件总线封装后再用的方式

    Vue eventBus事件总线封装后再用的方式

    EventBus称为事件总线,当两个组件属于不同的两个组件分支,或者两个组件没有任何联系的时候,不想使用Vuex这样的库来进行数据通信,就可以通过事件总线来进行通信,这篇文章主要给大家介绍了关于Vue eventBus事件总线封装后再用的相关资料,需要的朋友可以参考下
    2022-06-06
  • 详解Vue中组件传值的多重实现方式

    详解Vue中组件传值的多重实现方式

    这篇文章主要介绍了详解Vue中组件传值的多重实现方式,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Vue3 Reactive响应式原理逻辑详解

    Vue3 Reactive响应式原理逻辑详解

    这篇文章主要介绍了Vue3 Reactive响应式原理逻辑详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果

    使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果

    这篇文章主要介绍了用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果,代码简单易懂,非常不错,具有一定的参考借鉴价值需要的朋友可以参考下
    2019-08-08
  • Vue瀑布流插件的使用示例

    Vue瀑布流插件的使用示例

    这篇文章主要介绍了Vue瀑布流插件的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 如何去除vue项目中的#及其ie9兼容性

    如何去除vue项目中的#及其ie9兼容性

    本篇文章主要介绍了如何去除vue项目中的#及其ie9兼容性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • vue限制输入框只能输入8位整数和2位小数的代码

    vue限制输入框只能输入8位整数和2位小数的代码

    这篇文章主要介绍了vue限制输入框只能输入8位整数和2位小数,文中我们使用v-model加watch 实现这一个功能,代码简单易懂,需要的朋友可以参考下
    2019-11-11
  • 探索Vue中组合式API和选项式API的用法与比较

    探索Vue中组合式API和选项式API的用法与比较

    Vue3为我们开发提供了两种组件逻辑实现方式:选项式API和组合式API,本文将尝试为大家分析什么是选项式API和组合式API,以及两种API的优缺点,希望对大家有所帮助
    2023-12-12
  • Vue基础之MVVM,模板语法和数据绑定

    Vue基础之MVVM,模板语法和数据绑定

    这篇文章主要为大家介绍了Vue之MVVM,模板语法和数据绑定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Vue深入讲解数据响应式原理

    Vue深入讲解数据响应式原理

    应用会对用户的操作进行反馈,就叫响应式,数据变化会实时改变UI,就叫数据响应式,修改Vue实例中的数据时,视图会重新渲染,就是Vue的数据响应式
    2022-05-05

最新评论