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

  • 钉钉里的文档如何转发到微信里(钉钉里的文档如何打印)

    钉钉里的文档如何转发到微信里(钉钉里的文档如何打印)

  • 抖音怎么分屏观看(抖音如何分屏看)

    抖音怎么分屏观看(抖音如何分屏看)

  • 如何用qq同步助手把通讯录导入新手机(如何用QQ同步助手把华为手机资料转到苹果手机)

    如何用qq同步助手把通讯录导入新手机(如何用QQ同步助手把华为手机资料转到苹果手机)

  • OPPOa59s怎么录屏(oppoa59s怎么录屏带声音)

    OPPOa59s怎么录屏(oppoa59s怎么录屏带声音)

  • 华为nova7pro微信怎么分身(华为NOVA7pro微信视频聊天怎么设置美颜功能)

    华为nova7pro微信怎么分身(华为NOVA7pro微信视频聊天怎么设置美颜功能)

  • 广播域和冲突域怎么数(广播域和冲突域的关系)

    广播域和冲突域怎么数(广播域和冲突域的关系)

  • 车票信息已过期什么意思(12306车票信息已过期什么意思)

    车票信息已过期什么意思(12306车票信息已过期什么意思)

  • 电脑ram是什么意思(电脑ram是内存吗)

    电脑ram是什么意思(电脑ram是内存吗)

  • 华为p40pro有耳机孔吗(华为p60耳机)

    华为p40pro有耳机孔吗(华为p60耳机)

  • 怎么查看qq会员还有多少天(怎么查看qq会员赠送记录)

    怎么查看qq会员还有多少天(怎么查看qq会员赠送记录)

  • 手机屏幕发紫(手机屏幕发紫什么原因)

    手机屏幕发紫(手机屏幕发紫什么原因)

  • 手机卡托是什么(手机卡托是什么金属材质)

    手机卡托是什么(手机卡托是什么金属材质)

  • 苹果隔空播放无法连接(苹果隔空播放无法连接小米盒子)

    苹果隔空播放无法连接(苹果隔空播放无法连接小米盒子)

  • 台式电脑不用键盘怎么输入数字(台式电脑不用键盘可以玩游戏吗)

    台式电脑不用键盘怎么输入数字(台式电脑不用键盘可以玩游戏吗)

  • za苹果是哪个版本(za苹果是哪个版本是双卡吗)

    za苹果是哪个版本(za苹果是哪个版本是双卡吗)

  • 手机怎么回复qq好友(手机怎么恢复qq删除的好友)

    手机怎么回复qq好友(手机怎么恢复qq删除的好友)

  • 苹果x能否反向充电(苹果x手机的反向充电功能在哪里设置)

    苹果x能否反向充电(苹果x手机的反向充电功能在哪里设置)

  • 第一弹有什么功能(第一弹的)

    第一弹有什么功能(第一弹的)

  • 拼多多买家怎么修改评价(拼多多买家怎么申请开票)

    拼多多买家怎么修改评价(拼多多买家怎么申请开票)

  • 计算机的实体安全主要是指(计算机的实体安全技术不包括)

    计算机的实体安全主要是指(计算机的实体安全技术不包括)

  • 文件如何按照序号排序(文件如何按照序号重命名)

    文件如何按照序号排序(文件如何按照序号重命名)

  • 苹果短信效果发给对方为啥没有效果(苹果苹果发短信)

    苹果短信效果发给对方为啥没有效果(苹果苹果发短信)

  • ipad六代叫什么(ipad六代百度百科)

    ipad六代叫什么(ipad六代百度百科)

  • 照片的k是什么意思啊(照片k是什么意思代表什么)

    照片的k是什么意思啊(照片k是什么意思代表什么)

  • 搜索抖音号找不到用户(搜索抖音号找不到对方)

    搜索抖音号找不到用户(搜索抖音号找不到对方)

  • airpods2如何调音量(airpods2如何调节音量大小)

    airpods2如何调音量(airpods2如何调节音量大小)

  • 前端开发神器VS Code安装教程(前端开发软件哪个最好)

    前端开发神器VS Code安装教程(前端开发软件哪个最好)

  • dpkg-deb命令  deb软件包管理器(dpkg -s命令)

    dpkg-deb命令 deb软件包管理器(dpkg -s命令)

  • 用于员工福利的进项税转出分录
  • 自有住房出租
  • 税务问答网站
  • 金融企业哪些方面可以进行数据分析
  • 合同资产和合同结算
  • 冲回存货跌价准备所得税是调增还是调减
  • 所得税的账务处理流程
  • 销项发票导出是什么意思
  • 销售的增值税怎么算
  • 企业间无偿划转会计分录
  • 给客户赔偿如何入账
  • 维修费用的税率
  • 保费收入包含
  • 以前年度损益结转到什么科目
  • 什么情况下要交增值税
  • 公司负担劳务费的个税如何做分录
  • 报关单和发票上的公司抬头不一致
  • 多缴增值税怎么退税
  • 工程预算费用会计怎么做
  • 企业不得抵扣进项税的情形
  • 电脑桌面点击鼠标右键就闪退
  • mac 系统查看
  • mac鼠标移动到角落立刻显示桌面
  • 鸿蒙3.0内测申请成功显示名额已满
  • 固定资产计提完折旧怎么处理
  • 关闭bios启动
  • MAC OS X 10.12.5 beta 4怎么升级 OS X 10.12.5 beta 4升级图文教程
  • win11可以触屏吗
  • 代开专票缴纳的增值税怎么做账?
  • 企业向银行贷款要交印花税吗
  • 无形资产的摊销年限不得低于多少年
  • 保险业营改增
  • 企业发给员工的工资要交税吗
  • vue框架基础知识
  • php支持断点续传吗
  • php use关键字
  • springboot集成clickhouse
  • 猿创设计科技有限公司
  • 股东退股分利润
  • 一般人财务报表季报还是月报
  • 进项转出了还能再转进去吗
  • 微信小程序实现发红包
  • http上传错误
  • mongodb 入门
  • 清卡操作流程
  • 没有原始凭证可以记账吗
  • 简述清算机构的职责
  • 确认销售收入时不影响应收账款入账金额的是
  • 增值税扣款了能退回吗?
  • 营改增后可以抵扣的进项
  • 货物抵货款的账务处理
  • 生产线更新改造替换的旧设备
  • 清算资金往来借贷方什么意思
  • 将税后利润首先用于增加投资
  • 费用报销单干嘛用
  • 房地产企业的企业所得税是多少
  • 反结账钱会转回去吗
  • 租赁费属于酌量性固定成本
  • 刻章发票可以抵扣吗
  • 设计会计凭证
  • mysql 5.7 8.0
  • mysql5.0使用教程
  • ubuntu 装系统
  • 大白菜一键装机教程
  • 电脑xp系统的设置在哪
  • ubuntu12.04 amd64系统中lamp环境搭建方法
  • exeploer.exe
  • win8图片查看器无法打开图片内存不足
  • 运维是什么的
  • 网页标准化技术有哪些
  • div如何排版
  • jquery获取当前对象
  • 商务英语考英语笔译 算跨考吗
  • onInterceptTouchEvent onTouchEvent 的坑 坑死了
  • 北京户籍网官方网站
  • 公司被分立,应将分立后的单位
  • 人工成本占企业利润比例
  • 讨论如何做好寺庙管理服务工作
  • 企业营商环境包括哪些内容
  • 吉林省会考成绩查询入口网站官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设