位置: IT常识 - 正文

vue3项目中使用three.js(vue3用法)

编辑:rootadmin
vue3项目中使用three.js vue3项目中使用three.js前言一、three.js是什么?二、vue3中下载与安装three.js三、操作步骤1.创建场景2.创建物体3.添加光源4.添加相机5.开始渲染四、myThree.vue源代码五、效果图1.单个模型2.多个模型总结前言

推荐整理分享vue3项目中使用three.js(vue3用法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3项目中使用代码编辑工具,vue3this,vue3用法,vue3项目中使用高德地图,vue3用法,vue3项目中使用vue2组件,vue3项目中使用高德地图,vue3项目中使用代码编辑工具,内容如对您有帮助,希望把文章链接给更多的朋友!

在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-controlsvue3项目中使用three.js(vue3用法)

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渲染图形是一个很好玩的东西,欢迎大家一起交流。

本文链接地址:https://www.jiuchutong.com/zhishi/299756.html 转载请保留说明!

上一篇:反射填充详解ReflectionPad2d(padding)(反射dll)

下一篇:〖Python网络爬虫实战②〗- Web网页基础(150讲轻松搞定python网络爬虫)

  • 华为p40 pro是5g手机吗(华为p40pro是真正意义上的5g吗)

    华为p40 pro是5g手机吗(华为p40pro是真正意义上的5g吗)

  • 手机格式化了没有备份怎么办(手机格式化了没法激活怎么办)

    手机格式化了没有备份怎么办(手机格式化了没法激活怎么办)

  • 微博发帖在哪发(微博发帖在哪发的)

    微博发帖在哪发(微博发帖在哪发的)

  • xs是双层主板吗(xs是双层主板还是单层)

    xs是双层主板吗(xs是双层主板还是单层)

  • 矢量源文件是什么意思(矢量文件是什么)

    矢量源文件是什么意思(矢量文件是什么)

  • 淘宝更换主图会影响权重吗(淘宝更换主图会影响什么)

    淘宝更换主图会影响权重吗(淘宝更换主图会影响什么)

  • kindle官翻机和全新机区别(kindle官翻好还是全新好)

    kindle官翻机和全新机区别(kindle官翻好还是全新好)

  • siri连接失败什么原因(siri经常无法连接)

    siri连接失败什么原因(siri经常无法连接)

  • 华为free3防摔吗(华为freebuds3i防水吗)

    华为free3防摔吗(华为freebuds3i防水吗)

  • 微软雅黑和黑体的区别(微软雅黑和黑体哪个字体文字加粗效果最好)

    微软雅黑和黑体的区别(微软雅黑和黑体哪个字体文字加粗效果最好)

  • 抖音动态在哪里找(抖音动态在哪里发)

    抖音动态在哪里找(抖音动态在哪里发)

  • 华为bah2-al10是什么型号(华为bah2al10平板是什么型号)

    华为bah2-al10是什么型号(华为bah2al10平板是什么型号)

  • 怎么给手机设置密码(怎么给手机设置动态壁纸)

    怎么给手机设置密码(怎么给手机设置动态壁纸)

  • 荣耀手机屏幕上的小圆点怎么取消(荣耀手机屏幕上的时间和天气显示没了)

    荣耀手机屏幕上的小圆点怎么取消(荣耀手机屏幕上的时间和天气显示没了)

  • 支付宝在哪查已婚未婚(支付宝在哪查已婚)

    支付宝在哪查已婚未婚(支付宝在哪查已婚)

  • 华为nova6有灭屏显示吗(华为nova6有灭屏显示时间吗)

    华为nova6有灭屏显示吗(华为nova6有灭屏显示时间吗)

  • a1634是苹果什么型号(a1634是什么型号的)

    a1634是苹果什么型号(a1634是什么型号的)

  • 华为畅享9有没有nfc(华为畅享9有没有投屏功能在哪里呢)

    华为畅享9有没有nfc(华为畅享9有没有投屏功能在哪里呢)

  • 手机美团怎么叫外卖(怎么在美团上叫号)

    手机美团怎么叫外卖(怎么在美团上叫号)

  • word制作图片加文字(word图片)

    word制作图片加文字(word图片)

  • xr没有3d touch功能吗

    xr没有3d touch功能吗

  • 毒免费鉴别要多久(毒上免费鉴别是有几次?)

    毒免费鉴别要多久(毒上免费鉴别是有几次?)

  • 苹果11充电口插口是什么(苹果11充电口插不进去充电线怎么办)

    苹果11充电口插口是什么(苹果11充电口插不进去充电线怎么办)

  • 讯飞输入法如何打韩文(讯飞输入法如何自己制作键盘)

    讯飞输入法如何打韩文(讯飞输入法如何自己制作键盘)

  • Win7对话框“文件夹访问被拒需权限执行操作”(win7对话框文本框在哪里)

    Win7对话框“文件夹访问被拒需权限执行操作”(win7对话框文本框在哪里)

  • 最高像素的数码相机是什么(最高像素的手机)

    最高像素的数码相机是什么(最高像素的手机)

  • 【Web前端】怎样用记事本写一个简单的网页-html(web前端入门教程)

    【Web前端】怎样用记事本写一个简单的网页-html(web前端入门教程)

  • 元宇宙与AI能否相辅相成,打造一个全新的世界观(元宇宙与nft)

    元宇宙与AI能否相辅相成,打造一个全新的世界观(元宇宙与nft)

  • chatGPT之Python API启用上下文管理

    chatGPT之Python API启用上下文管理

  • 全国增值税发票查验平台入口
  • 劳务公司的个税如何申报
  • 表见代理通俗
  • 疫情期间生活服务业免征增值税截止时间
  • 给客户开增值税专用发票
  • 开增值税发票规格是否可以不用填
  • 已收货款没发货怎么退款
  • 土增税预缴是按不含税收入算
  • 加计扣除和研发费不一致
  • 以前年度损益调整属于哪类科目
  • 利润表没有其他业务收入
  • 基建贷款贴息账户有哪些
  • 违约金收入需要缴纳印花税吗
  • 保证金抵扣货款分录
  • 企业外购零部件入存货哪一会计科目核算?
  • 空白发票作废后验旧显示不了
  • 内销征税是什么意思
  • 金税四期具体内容
  • 个人年终奖如何交税
  • 跨区经营的税务政策
  • 公司扣了员工的个人所得税但没有帮员工申报
  • 环保税计算方法和税率1.2
  • 增值税纳税申报表怎么填
  • 小微企业应纳税所得额不超过100万
  • 老板私车转让给老板
  • sysprep.exe是什么
  • 华为鸿蒙怎么看手机型号
  • 小企业会计准则和一般企业会计准则的区别
  • 企业所得税汇算清缴操作流程
  • 主板bios在线升级
  • thinkpad x230笔记本
  • 电脑上一键复制是哪个键
  • 促销费用计入销售费用哪个科目
  • 退货 会计
  • 怎样改善现金流量比率
  • adblock规则编写
  • 消费税的会计分录怎么写
  • 提取企业发展基金用到银行存款科目吗
  • 解决跨域问题的注解
  • windows. location
  • 计算机视觉需要学什么
  • php图片库
  • 基于专业性的家校双向互动,需要家长的学校教育参与
  • js 数组中的重数
  • 如何网上添加办税员上海
  • 物流公司修理班的管理有那些书
  • 代理返点怎么算
  • 非流动资产处置计入什么科目
  • 冲暂估会计分录
  • 短期投资理财是
  • 职工教育经费和职工福利费扣除比例
  • 公司举办年会的心得体会
  • 房屋租赁费需要分摊吗
  • 个税免税部分
  • 租车费开票属于哪个类别
  • 年金保险是指什么保险
  • 2021年废铁回收
  • 企业报税表格填写
  • 疫情期间社保减免优惠政策几个月
  • 发票审核中是什么意思
  • 合并报表问题
  • 房地产开发票的时间?
  • 专票三流合一指哪三流
  • 分享一下相亲时碰见过哪些奇葩事
  • solaris syslog
  • 怎么删除文件的隐藏属性
  • 微软the initiative
  • centos怎么设置密码
  • mac插hdmi没画面
  • linux中sed
  • win10系统如何快速回到桌面
  • android textview设置字体
  • nodejs截图
  • js闭包作用问题解决应用
  • 开票系统开不了票
  • 上海退休核定表两种算法
  • 期初未缴税额是什么意思
  • 深圳税务开票软件发票下载
  • 开票软件里的统计怎么弄
  • 2019小规模纳税人标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设