vue2.x引入threejs
@
vue2.x引入threejs
npm安装
npm install three
使用指定版本:
npm install three@<版本号>
其他插件
因为本次开发需要引入3D模型,所以需要使用 MTLLoader
, OBJLoader
两种加载器,因为开发需求和
版本问题, 最新版本自带的加载器不能实现需求,所以需要额外引入three-obj-mtl-loader
插件,并且threejs版本需要退到122版本;
npm安装three-obj-mtl-loader
npm install three-obj-mtl-loader --save
实例
//-- html部分 -- 开始 --
<div class="three_box" id="container">
</div>
//-- html部分 -- 结束 --
import * as THREE from 'three';
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // 控制器-控制相机运行轨道
import { MTLLoader, OBJLoader } from 'three-obj-mtl-loader' //项目中使用到.obj文件和.mtl文件,故引入
mounted() {
let width = 1053 // dom宽度
let height = 473 // dom高度
this.scene = new THREE.Scene()// 运行创建场景函数
let mtlLoader = new MTLLoader() //创建MTLLoader实例
let objLoader = new OBJLoader() //创建OBJLoader实例
let k = width / height // 宽高比
let camera = new THREE.PerspectiveCamera( 60, k, 1, 2000) //创建相机,这个相机模拟人眼所看到的景象,近大远小没参数分别为:
//fov — 摄像机视锥体垂直视野角度
//aspect — 摄像机视锥体长宽比
//near — 摄像机视锥体近端面
//far — 摄像机视锥体远端面
camera.position.set( -500, 300, 300 )//设置相机位置
this.initDoor()//调用引入3D模型方法
this.initcao() //调用几何图形方法
//点光源
let point = new THREE.PointLight(0xffffff)
point.position.set(800, 800, 2000); //光源位置
this.scene.add(point); //光源添加进场景
//环境光
let ambient = new THREE.AmbientLight(0xffffff); //设置环境光
this.scene.add(ambient) //讲环境光加入场景
this.renderer = new THREE.WebGL1Renderer(); // 实例渲染器
this.renderer.setSize( width, height) //渲染器宽高
this.renderer.setClearColor(new THREE.Color('#07224e'), 1) //设置背景颜色
setTimeout(() => {
document.getElementById('container').appendChild(this.renderer.domElement)//将渲染器添加进dom
}, 500)
this.animate()//调用动画效果
this.controls = new OrbitControls(this.camera, this.renderer.domElement) //添加相机和渲染器到控制器,实现滑动
},
methods: {
initcao() {
let geometry = new THREE.BoxGeometry(3200, 1600, 8); //矩形平面
let material = new THREE.MeshLambertMaterial({ // 配置样式,包括颜色 透明度等
color: new THREE.Color('#bcbfc6'),
transparent: true,
opacity: 0.3,
side: THREE.DoubleSide
});
let mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
mesh.rotateX(-Math.PI / 2);
this.scene.add(mesh); //网格模型添加到场景中
},
initDoor() {
let that = this //后面回调会影响this指向
let mtlLoader = new MTLLoader()
let objLoader = new OBJLoader();
mtlLoader.load('static/door.mtl', function( material) { //引入模型.mtl文件,是3D模型的贴图,如果不需要贴图可以不使用,模型会只有一个框架
material.preload();
objLoader.setMaterials(material)
objLoader.load('static/door.obj', //引入模型.obj文件
function( obj) {
obj.position.z = -188 //调整模型位置
obj.position.x = -265 //调整模型位置
obj.position.y = 10 //调整模型位置
obj.rotateY(Math.PI / 2) //调整模型角度
obj.scale.set( 20, 20, 20 ) //调整模型放大缩小倍数
that.scene.add(obj) //模型添加进场景
},
)
})
},
animate() {
//这里自己写点要对模型进行的操作
this.renderer.render(this.scene, this.camera);
requestAnimationFrame(this.animate) //这里按帧更新画面,大概一秒60次左右
},
}
强调
如果在开发中需要引入3D模型,模型文件应放在与src
文件同级的static
下,引入方式应该是 'static/door.mtl'
如果在开发过程中出现threejs生成的canvas出现外边框,只需要用css样式修改,代码如下:
.three_box {
width: 1053px;
height: 473px;
>>> canvas:focus-visible {
outline: 0px
}
}
vue2.x引入threejs的更多相关文章
- vue学习笔记(三)- vue2.x引入Element-ui
webpack+vue2.x+element-ui 作者:狐狸家的鱼 本文链接:vue2.x引入Element-ui GitHub:sueRimn 1.新建项目 vue init webpack vu ...
- vue2.0引入腾讯地图
百度很多东西,然后我没找到腾讯地图在VUE2.0里面的引用.于是根据找的其他地图引用资料进行尝试.步骤如下. 首先在src里面建立了TMap.js的文件,内容如下: export function T ...
- VUE2 项目 引入 leaflet.draw全过程
leaflet.draw的参考文档:http://leaflet.github.io/Leaflet.draw/docs/leaflet-draw-latest.html 这个网址不稳定,多刷新几 ...
- vue2.0 引入font-awesome
网上的大部分教程复杂而且难看懂,其实两步就能搞定. 先cnpm install font-awesome --save引入依赖 然后在main.js引入 font-awesome/css/font-a ...
- vue2.0引入现有css文件
1.在vue文件中的<style>内填写需要引用的文件 如: @import "./css/indexTest.css";
- Vue2源码分析-逻辑梳理
很久之前就看完vue1,但是太懒就一直没写博客,这次打算抽下懒筋先把自己看过了记录下来,否则等全部看完,估计又没下文了 看源码总需要抱着一个目的,否则就很难坚持下去,我并没做过vue的项目,我几乎很少 ...
- vue2使用高德地图vue-amap定位以及AMapUI标注
前言 最近在vue里使用了高德地图vue-amap以及AMapUI,我在这里就说下如何在vue2里引入vue-amap和AmapUI以及使用定位 (在这里默认你已经安装了vue-cli) 安装 npm ...
- ThreeJS geometry的顶点世界坐标
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸
这个小案例是当初我在学习的时候,小的一个小案例,代码还需要进一步优化:还请谅解~~:主要用到了threeJS创建mesh,创建平面,设置mesh的平移,旋转.缩放.自传.透明度.拉伸等这些小功能: 采 ...
随机推荐
- golang拾遗:自定义类型和方法集
golang拾遗主要是用来记录一些遗忘了的.平时从没注意过的golang相关知识. 很久没更新了,我们先以一个谜题开头练练手: package main import ( "encoding ...
- 单调栈_Largest Rectangle in a Histogram
题面 https://flowus.cn/xjsc01/share/395ca9dc-315c-4bd5-a942-016709980c03 这里还有很多笔记(归纳好的) https://www.ac ...
- go交叉编译,部署到linux上出现cannot execute binray file的解决方案
写在前面: 了解过常见的项目部署方式后,打算先从最简单的方式开始.没想到踩了大坑.先说下整个部署的过程. 博主是在window上生成linux上的可执行文件.. 具体过程: 1.首先按照网上说的 ...
- placeholder 设置换行三种方式
在 html 中编写代码时保留代码换行 <textarea name="" id="" cols="30" rows="10 ...
- 技术分享|闪回在MySQL中的实现和改进
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 3306π 福州站,以下内容是由万里数据库,研发工程师唐洁分享的MySQL闪回方案完整PPT. Enjoy GreatSQ ...
- 技术分析 | 通过DML语句浅谈binlog和redo log
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1 ...
- 技术分享 | ARM下中标麒麟系统ky10使用Xtrabackup-8.0.25
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 一.需求背景 查询Percona官方手册,Xtrabackup 8.0可以备份M ...
- 节后复工,Apache DolphinScheduler喜迎7位新Committer
Apache DolphinScheduler(Incubating)社区在节后上周第一周就迎来了好消息,经过 Apache DolphinScheduler PPMC 们的推荐和投票,我们高兴的宣布 ...
- NC20273 [SCOI2009]粉刷匠
题目链接 题目 题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每 ...
- Redis 04 列表
参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 在 Redis ...