位置: 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网络爬虫)

  • 如果你有一名穷亲戚(如果你穷困潦倒)

    如果你有一名穷亲戚(如果你穷困潦倒)

  • 魅族18x是双扬声器吗(魅族18的双扬声器)

    魅族18x是双扬声器吗(魅族18的双扬声器)

  • 华为p40和荣耀30pro的区别(华为p40和荣耀30pro参数对比)

    华为p40和荣耀30pro的区别(华为p40和荣耀30pro参数对比)

  • 钉钉红包如何转微信(钉钉红包如何转给别人)

    钉钉红包如何转微信(钉钉红包如何转给别人)

  • 华为手机支付保护中心在哪(华为手机支付保护中心在哪里)

    华为手机支付保护中心在哪(华为手机支付保护中心在哪里)

  • 手机克隆怎么不显示我是新手机(手机克隆怎么不显示新设备)

    手机克隆怎么不显示我是新手机(手机克隆怎么不显示新设备)

  • 为什么快手后面有带数字,有没带的(快手为什么有的出现在发现上)

    为什么快手后面有带数字,有没带的(快手为什么有的出现在发现上)

  • 快手怎么删除性别年龄(快手怎么删除感兴趣的人)

    快手怎么删除性别年龄(快手怎么删除感兴趣的人)

  • oppo手机时间显示秒(oppo手机时间显示怎么调大)

    oppo手机时间显示秒(oppo手机时间显示怎么调大)

  • 淘宝公益宝贝一般设置多少(淘宝公益宝贝一般捐赠多少合适)

    淘宝公益宝贝一般设置多少(淘宝公益宝贝一般捐赠多少合适)

  • 华为的闹钟怎么找(华为的闹钟怎么设置自己喜欢的音乐)

    华为的闹钟怎么找(华为的闹钟怎么设置自己喜欢的音乐)

  • 辅助触控手势有什么用(辅助触控手势有什么作用)

    辅助触控手势有什么用(辅助触控手势有什么作用)

  • 淘集集怎么打不开了(淘集集失败的原因是什么)

    淘集集怎么打不开了(淘集集失败的原因是什么)

  • 闲鱼快递损坏谁负责(闲鱼快递造成的损坏要卖家承担)

    闲鱼快递损坏谁负责(闲鱼快递造成的损坏要卖家承担)

  • 手机相册怎么找回以前的照片(荣耀手机相册怎么找)

    手机相册怎么找回以前的照片(荣耀手机相册怎么找)

  • ip协议是可靠的吗(ip协议是可靠还是不可靠)

    ip协议是可靠的吗(ip协议是可靠还是不可靠)

  • 笔记本电脑打不出字怎么回事(笔记本电脑打不了字按哪个键恢复)

    笔记本电脑打不出字怎么回事(笔记本电脑打不了字按哪个键恢复)

  • 怎么设计宣传单(如何设计宣传单吸引人)

    怎么设计宣传单(如何设计宣传单吸引人)

  • 快手pk申请受限怎么办(快手pk受限几天恢复)

    快手pk申请受限怎么办(快手pk受限几天恢复)

  • 制作视频时创意有哪些技巧(制作视频的创意)

    制作视频时创意有哪些技巧(制作视频的创意)

  • 拼多多怎么给客服发视频(拼多多怎么给客户留联系方式)

    拼多多怎么给客服发视频(拼多多怎么给客户留联系方式)

  • rx580 8g配什么cpu(rx580 8g配什么CPU最好)

    rx580 8g配什么cpu(rx580 8g配什么CPU最好)

  • 苹果手机的用户体验计划可以关闭吗(苹果手机的用户体验计划在哪里关闭)

    苹果手机的用户体验计划可以关闭吗(苹果手机的用户体验计划在哪里关闭)

  • vue照片怎么设置0.5秒(vue怎么显示图片)

    vue照片怎么设置0.5秒(vue怎么显示图片)

  • 微信可以发实况照片吗(微信可以发实况图吗朋友圈)

    微信可以发实况照片吗(微信可以发实况图吗朋友圈)

  • 2014812是红米几(红米手机2014812是红米几)

    2014812是红米几(红米手机2014812是红米几)

  • Windows 10如何开启“查找我的设备”功能(windows10如何开启自动更新)

    Windows 10如何开启“查找我的设备”功能(windows10如何开启自动更新)

  • 什么是电力?(什么是电力市场)

    什么是电力?(什么是电力市场)

  • vlock命令  锁住虚拟终端(锁定vlookup快捷键)

    vlock命令 锁住虚拟终端(锁定vlookup快捷键)

  • 居间费用如何纳税
  • 税务行政复议是税务行政复议机关的裁决活动
  • 分销佣金税务处理
  • 高速公路费如何冲抵
  • 个体户免税金额现在是多少
  • 受托代销商品和受托代销商品款怎么列示
  • 物业费免交条件
  • 个人厂房租赁税率是多少
  • 增值税减免备案改备查后续管理
  • 抵押住房属于
  • 机动车销售发票是否需要认证
  • 事业单位个税可以抵扣吗
  • 工业企业的三个阶段
  • 本月支付上月运费
  • 个税的滞纳金怎么算
  • 前程无忧靠什么赚钱
  • 自营方式建造固定资产增值税
  • 用公户付了一笔款怎么办
  • 公司买包包送员工入可以计入什么科目?
  • 小规模纳税人开具1%增值税专用发票可以抵扣吗
  • 一般纳税人花椒税率
  • 双倍余额折旧法
  • 城建税教育费附加和地方教育费附加
  • 非居民个人所得税税率表2021
  • 临时员工什么意思
  • 过路费增值税可以抵扣吗
  • 有未分配利润就有盈余返还吗?
  • 个人所得税适合月度税率表有哪些
  • 个税申报月份有误如何调整?
  • 银行存款转定期存款计入什么科目
  • 生产废料怎么处理会计分录
  • 如何部署迫击炮
  • thinkphp3.2 layui
  • 其他综合收益是什么意思
  • linux设置权限规则
  • 半月湾在哪
  • 自有房子出租怎么做账
  • 企业研发费用的归集
  • idea安装vue.js
  • 小企业会计准则财务报表至少包括
  • php遍历文件夹
  • 玩转ChatGPT:中科院ChatGPT Academic项目部署与测评
  • A Loepa oberthuri moth (© Robert Thompson/Minden Pictures)
  • 前端项目性能优势怎么写
  • java基础笔试题在线考
  • ls -lh命令
  • 完美解决win10间歇性掉线
  • 命令行查看硬件信息
  • 操作系统启动流程
  • 自然人专项扣除填报
  • 合并报表的会计主体
  • 生产企业生产车间人员密度是多少
  • 产品淘汰造成的影响
  • 企业所得税免税项目
  • 控股子公司注销母公司账务处理实例
  • 存货报废进项税转出吗
  • 差旅费报销金额怎么算
  • 员工出差的餐费发票是否全部入差旅费
  • 员工体检费计入什么会计科目里
  • 经营活动产生的现金净流量怎么算
  • 汇算清缴退费怎么入账
  • 不能抵扣的进项税怎么做账务处理
  • mysql建唯一索引
  • acer笔记本重装系统教程
  • ubuntu集成开发环境
  • win10系统怎么关闭病毒防护
  • win7或win8、win8.1系统下安装ubuntu实现双系统图文教程
  • WIN10系统如何修复
  • win10各个版本的桌面
  • linux 源文件
  • win10系统如何解除屏保
  • jquery的鼠标移入事件
  • 简述ajax
  • Javascript 字符串拼接
  • js如何实现单例模式
  • 安卓手机管家下载
  • android:thumb
  • 广东国税局发票查询系统
  • 残疾人创业有税收什么优惠政策
  • 出口退税备案单证目录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设