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

  • 节奏加快,年轻人压力的增加,脱发不再是中老年人的专利

    节奏加快,年轻人压力的增加,脱发不再是中老年人的专利

  • iphone13pro屏幕尺寸多大(iphone13pro屏幕尺寸像素)

    iphone13pro屏幕尺寸多大(iphone13pro屏幕尺寸像素)

  • 苹果平板连不上校园网(苹果平板连不上蓝牙耳机怎么回事)

    苹果平板连不上校园网(苹果平板连不上蓝牙耳机怎么回事)

  • arxiv是什么意思(arxiv是什么级别的论文)

    arxiv是什么意思(arxiv是什么级别的论文)

  • 京东自营有翻新机吗(京东自营有翻新显卡吗)

    京东自营有翻新机吗(京东自营有翻新显卡吗)

  • 美团专职注销账号需要多久(美团注销账号是什么意思)

    美团专职注销账号需要多久(美团注销账号是什么意思)

  • 华为p40手机语音文件怎么录制(华为p40语音输入在哪)

    华为p40手机语音文件怎么录制(华为p40语音输入在哪)

  • 耳机插电脑后再插手机没用了(耳机插电脑后再开机)

    耳机插电脑后再插手机没用了(耳机插电脑后再开机)

  • 自动获取ip和固定ip有什么区别(自动获取ip固定)

    自动获取ip和固定ip有什么区别(自动获取ip固定)

  • 无主题信息为什么删除不了(无主题信息为什么删除不了华为手机)

    无主题信息为什么删除不了(无主题信息为什么删除不了华为手机)

  • 微信怎么整夜间模式(微信怎么整夜间静音模式)

    微信怎么整夜间模式(微信怎么整夜间静音模式)

  • 网线口是圆的怎么插(网线接口圆口)

    网线口是圆的怎么插(网线接口圆口)

  • 荣耀手机录音在哪(荣耀手机录音在哪里找出来)

    荣耀手机录音在哪(荣耀手机录音在哪里找出来)

  • 怎么把qq名字变成彩色(怎么把QQ名字变成动态时间)

    怎么把qq名字变成彩色(怎么把QQ名字变成动态时间)

  • 手机qq如何建群聊(手机qq上如何建群)

    手机qq如何建群聊(手机qq上如何建群)

  • 内存储器的容量是指(内存储器的容量是由________总线的宽度确定的)

    内存储器的容量是指(内存储器的容量是由________总线的宽度确定的)

  • 手机有硬盘吗(苹果手机可以插u盘吗)

    手机有硬盘吗(苹果手机可以插u盘吗)

  • vue怎么弄慢动作(vue3.0动画)

    vue怎么弄慢动作(vue3.0动画)

  • 七天网络app登录未授权(七天网络app怎么登录)

    七天网络app登录未授权(七天网络app怎么登录)

  • ap log设置什么意思(aplogosize)

    ap log设置什么意思(aplogosize)

  • 设备上sn是什么意思(设备的sn码是什么意思怎么查)

    设备上sn是什么意思(设备的sn码是什么意思怎么查)

  • 消息免打扰关联qq可以收到么(消息免打扰关联账号是否看得见)

    消息免打扰关联qq可以收到么(消息免打扰关联账号是否看得见)

  • 黑鲨2两侧灯光怎么开(黑鲨手机两侧灯条怎么开启)

    黑鲨2两侧灯光怎么开(黑鲨手机两侧灯条怎么开启)

  • 腾讯视频怎么看好友是不是会员(腾讯视频怎么看热度排行)

    腾讯视频怎么看好友是不是会员(腾讯视频怎么看热度排行)

  • appstore如何解除禁用(appstore如何解除200mb限制)

    appstore如何解除禁用(appstore如何解除200mb限制)

  • 苹果耳机左右音量怎么不一样(苹果耳机左右音量不一样)

    苹果耳机左右音量怎么不一样(苹果耳机左右音量不一样)

  • 登录页面的实现及跳转(vue-router)(登录页面的实现方式)

    登录页面的实现及跳转(vue-router)(登录页面的实现方式)

  • 提供劳务代扣的发票
  • 盈利能力也可以反映短期偿债能力
  • 工资及工资性支出
  • 发票验旧的办理条件及所需资料是什么
  • 增值税发票污染了能补开吗
  • 预付账款年底账务怎么做账?
  • 全额计提坏账符合的条件
  • 期末数未分配利润为负数的会计分录怎么处理?
  • 现金收据为什么也在自制原始凭证的范畴呢?
  • 复式记账法和会计分录
  • 增值税普通发票税率
  • 仓储租赁增值税
  • 新办企业地税要备案吗
  • 打印机第一行未赋码
  • 小规模纳税人1%税收优惠
  • 银行存款二级明细科目有哪些
  • 收入不交税怎么处理
  • 烟酒专用发票能抵税吗
  • 小规模纳税人销售收入会计分录
  • 打车进项可以抵扣吗
  • 业务招待费不超过销售收入的5‰
  • 工程预收款账务处理
  • 加速折旧以后年度如何填报调减额
  • 在Linux系统中安装Samba服务器
  • 浅谈财务风险的防范与控制
  • 电脑网络提示ip地址错误怎么办
  • 海关进口增值税怎么认证抵扣
  • PHP:json_last_error()的用法_JSON函数
  • 填制的凭证内容有哪些
  • 园林绿化工程公司简介范文
  • “网络爬虫”
  • 最贵的安卓应用软件
  • 施工企业成本费用有哪些方面构成
  • 今日清明是清明开始还是结束
  • vue.js.
  • 旅行发票可以做账吗
  • 外省人员收入怎么查
  • 其他应付款包括的内容
  • 现金折扣退回要考虑财务费用吗
  • wordpress怎么降级
  • 微擎框架源码
  • 公司基本户如何注销
  • 增值税普票怎么开演示
  • 增值税是如何计算的
  • 开负数发票的规定是有?
  • 一般纳税企业增值税的核算应当使用
  • 应交税费企业所得税科目
  • 购买方已抵扣怎么做分录
  • case语句怎么执行
  • 企业与个人之间关系的理解
  • 哪种发票可以报税
  • 收到海关进口关税怎么办
  • 权益法下股权投资转让
  • 社保滞纳金可以免除吗
  • 金税服务费发票哪里打印
  • 协会会费怎么入账
  • 请问购买
  • 恢复网页浏览历史记录
  • win7旗舰版系统还原无法启动
  • windows任务管理
  • centos6.5配置网络
  • LiteSpeed添加虚拟主机+支持htaccess图文教程
  • Windows7如何查看电脑配置
  • win10 6个文件夹
  • javascript的基本语句
  • jquery prompt
  • 每日十条简短新闻
  • 自制u盘杀手
  • 深入探讨换个说法怎么说
  • Python中urllib+urllib2+cookielib模块编写爬虫实战
  • jquery 动态添加元素
  • 小规模纳税人税率2024
  • 深圳营业执照办理咨询电话
  • 残疾人个人所得税怎么申报退税
  • 税务局怎么增加购票员
  • 跨区域报验和预审的区别
  • 孵化企业税收优惠
  • 网上缴公积金怎么查询
  • 东莞国税咨询电话
  • 贵州泉源会计服务有限公司花溪店位置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设