vue页面引入three.js实现3d动画场景操作


Posted in Javascript onAugust 10, 2020

vue中安装Three.js

近来无聊顺便研究一些关于3D图形化库。three.js是JavaScript编写的WebGL第三方库。Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它通过控制相机、视角、材质等相关属性来创造大量3D动画场景。

我们开始引入three.js相关插件。

1、首先利用淘宝镜像,操作命令为:

cnpm install three

2.接下来利用npm安装轨道控件插件:

关注我的微信公众号【前端基础教程从0开始】,加我微信,可以免费为您解答问题。回复“1”,拉你进程序员技术讨论群。回复“小程序”,领取300个优秀的小程序开源代码+一套入门教程。回复“领取资源”,领取300G前端,Java,微信小程序,Python等资源,让我们一起学前端。

npm install three-orbit-controls

3.接下来安装加载.obj和.mtl文件的插件:

npm i --save three-obj-mtl-loader

4.安装渲染器插件:

npm i --save three-css2drender

5、安装好以后,在页面中引入three.js并使用,在所调用页面引入的代码为:

import * as Three from ‘three'

主要插件都已经安装完成了,接下来可以实现一个demo,测试three.js是否引入成功。页面测试代码如下:

<template>
 <div>
 <div id="container"></div>
 </div>
</template>

<script>
 import * as Three from 'three'

 export default {
 name: 'ThreeTest',
 data () {
  return {
  camera: null,
  scene: null,
  renderer: null,
  mesh: null
  }
 },
 methods: {
  init: function () {
  let container = document.getElementById('container')
  this.camera = new Three.PerspectiveCamera(70, container.clientWidth / container.clientHeight, 0.01, 10)
  this.camera.position.z = 0.6
  this.scene = new Three.Scene()
  let geometry = new Three.BoxGeometry(0.2, 0.2, 0.2)
  let material = new Three.MeshNormalMaterial()
  this.mesh = new Three.Mesh(geometry, material)
  this.scene.add(this.mesh)

  this.renderer = new Three.WebGLRenderer({antialias: true})
  this.renderer.setSize(container.clientWidth, container.clientHeight)
  container.appendChild(this.renderer.domElement)
  },
  animate: function () {
  requestAnimationFrame(this.animate)
  this.mesh.rotation.x += 0.01
  this.mesh.rotation.y += 0.02
  this.renderer.render(this.scene, this.camera)
  }
 },
 mounted () {
  this.init()
  this.animate()
 }
 }
</script>
<style scoped>
 #container {
 height: 400px;
 }
</style>

注意相关变量的定义容器大小的定义,接下来可以运行当前vue项目,并在浏览器中查看当前效果:

vue页面引入three.js实现3d动画场景操作

出来的效果是一个旋转的正方形,这就表明当前项目已经成功引入three.js并可以运行,剩下的就可以创建场景,打造酷炫的3D效果。

补充知识:vue中three及其依赖引入和使用

官方文档和例子[https://threejs.org/docs/index.html#manual/zh/introduction/Creating-a-scene]

引入

单页面应用

<script src="../lib/three.js"></script> //ES5,相关依赖相同

模块化应用

npm 安装

npm install three --save

我自己的是适用于require

const THREE=require('three') //或者

import * as THREE from 'three'

官方依赖

各种控制器,加载器,渲染相关先将文件放入相关文件夹都可以通过这种方法引入。也可以使用npm安装,但在依赖多的情况下没必要安装。使用时同官方

import {CSS2DObject,CSS2DRenderer} from '../utils/THREE/CSS2DRenderer.js';

== 需要注意应该先在该文件引入var THREE = require(‘three'); 因为文件中有对three的使用==

vue页面引入three.js实现3d动画场景操作

或者是

//官方依赖文档jsm/controls/DragControls.js
//引入需要的依赖
import {
 EventDispatcher,
 Matrix4,
 Plane,
 Raycaster,
 Vector2,
 Vector3
} from "@/build/three.module.js";

....

//最后一步始终是暴露出去
export { DragControls };

相关插件

同样通过npm install XXX安装后,如精灵字体的three-spritetext,可以实现粗线条的three.meshline,以及常用的dat.gui插件

import SpriteText from 'three-spritetext';
var MeshLine = require('three.meshline'); //包含了MeshLine,MeshLineMaterial
//或者
var {MeshLine,MeshLineMaterial} = require('three.meshline');

其外性能检测插件Stats,不能通过npm 安装,可以先下载stats.min.js。

使用:

1、修改为stats.js

2、该文件最后有一句"object" === typeof module && (module.exports = Stats);将其注释

3、最后加上export default Stats

4、import Stats from ‘…/utils/THREE/stats.js';

经常与stats一起使用的dat需要先通过npm安装再使用

1、npm install dat.gui

2、var dat = require(“dat.gui”);

以上这篇vue页面引入three.js实现3d动画场景操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript延迟加载
Mar 09 Javascript
js 键盘记录实现(兼容FireFox和IE)
Feb 07 Javascript
25个好玩的JavaScript小游戏分享
Apr 22 Javascript
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
jQuery取消ajax请求的方法
Jun 09 Javascript
10个JavaScript中易犯小错误
Feb 14 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
Oct 02 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 Javascript
详解vue中v-model和v-bind绑定数据的异同
Aug 10 #Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 #Javascript
React实现阿里云OSS上传文件的示例
Aug 10 #Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
Aug 10 #Javascript
使用vue引入maptalks地图及聚合效果的实现
Aug 10 #Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
Aug 10 #Javascript
解决vue+webpack项目接口跨域出现的问题
Aug 10 #Javascript
You might like
php删除左端与右端空格的方法
2014/11/29 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
js获取页面description的方法
2015/05/21 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
python 删除非空文件夹的实例
2018/04/26 Python
python实现XML解析的方法解析
2019/11/16 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
用python实现学生管理系统
2020/07/24 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
Linux上比较文件的命令都有哪些
2013/09/28 面试题
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
党员自我剖析材料
2014/08/31 职场文书
2014年后勤工作总结
2014/11/18 职场文书
旅游项目合作意向书
2015/05/08 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
Python 中random 库的详细使用
2021/06/03 Python