【Three】基于vue使用three.js集成gui

1.搭建环境

ps:这里要按照node.js在之前有关vue搭建中有介绍
新建文件夹并在vsc终端中打开

1.输入vite创建指令

npm init vite@latest

请添加图片描述
然后我们cd进入刚才创建的目录下

npm install

安装所需依赖

npm run dev

启动该项目请添加图片描述

2.整理页面

将template 标签以及style标签中的内容进行整理请添加图片描述

3.将three.js中main.js的内容我们可以放在script标签中

2.使用集成gui

1.导入

这里的导入方式和不结合vue还是有区别的
请添加图片描述

2.创建点击全屏 退出全屏按钮

1.首先创建对象

请添加图片描述

2.创建gui请添加图片描述

3.添加按钮

将创建的对象以及对象的函数最为参数
请添加图片描述
现在我们就可以点击屏幕上渲染的按钮进行全屏和退出全屏
请添加图片描述
下面是不利于集成gui设置的点击全屏退出全屏的按钮使用集成gui可以快速的加快我们的开发速度

请添加图片描述
请添加图片描述
下面是script的源代码

//1.导入 
import * as THREE from 'three'
//引入轨道控制器
import {OrbitControls} from 'three/addons/controls/OrbitControls.js'
//导入lil.gui
import { GUI } from "three/examples/jsm/libs/lil-gui.module.min.js";


//2.创建场景
const scence = new THREE.Scene() 
//6.创建立方体 几何➕材质
const cubeGeometry = new THREE.BoxGeometry(2,2,2)
const cubeMaterial = new THREE.MeshNormalMaterial()
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)

//创建父元素
const parentMaterial = new THREE.MeshBasicMaterial({color: 0xffffff })
const parentCube = new THREE.Mesh(cubeGeometry, parentMaterial)
scence.add(parentCube)
parentCube.position.set(2,2,4)
parentCube.scale.set(2,1,4)
parentCube.add(cube)
//3.创建相机
const camera = new THREE.PerspectiveCamera(
    45, 
    window.innerWidth/window.innerHeight,
    1,
    1000
)
camera.position.set(20,20,20)
camera.lookAt(0,0,0)

//7. 创建坐标系辅助对象
const axesHelper = new THREE.AxesHelper(10) 
scence.add(axesHelper)

cube.position.set(3,0,4)
cube.rotation.x = Math.PI / 4
parentCube.rotation.x = Math.PI / 4

//10,创建网格辅助对象
const gridHelper = new THREE.GridHelper(20,20,0xffffff, 0xffffff)
gridHelper.material.transparent = true //透明度
gridHelper.material.opacity = 0.5
scence.add(gridHelper)




//4.创建渲染器
const renderer = new THREE.WebGL1Renderer({ antialias: true})   
renderer.setSize( window.innerWidth, window.innerHeight)
renderer.setPixelRatio(window.devicePixelRatio)
renderer.setAnimationLoop(animation)
document.body.appendChild(renderer.domElement)
//5.渲染  
function animation() {
    renderer.render(scence, camera) 
}


//8.创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement)
//设置带阻力惯性 
controls.enableDamping = true;
//设置阻力系数
controls.dampingFactor = 0.05
//设置旋转速度
console.autoRotate = true

//9.监听window的resize事件
window.addEventListener('resize', ()=> {
      //重新设置相机宽高比
      camera.aspect = window.innerWidth / window.innerHeight
      //更新相机投影取证
      camera.updateProjectionMatrix()

      //设置渲染器出图  照片大小
      renderer.setSize(window.innerWidth, window.innerHeight)
})

//点击全屏 退出全屏
// var btn = document.createElement("button");
// btn.innerHTML = "点击全屏"
// btn.style.position = "absolute"
// btn.style.top = "10px"
// btn.style.left = "10px"
// btn.style.zIndex = "999"
// btn.onclick = function(){
//   document.body.requestFullscreen()
// }
// document.body.appendChild(btn)

// var exitbtn = document.createElement("button");
// exitbtn.innerHTML = "退出全屏"
// exitbtn.style.position = "absolute"
// exitbtn.style.top = "10px"
// exitbtn.style.left = "150px"
// exitbtn.style.zIndex = "999"
// exitbtn.onclick = function() {
//   document.exitFullscreen()
// };
// document.body.appendChild(exitbtn)

//点击全屏 退出全屏 使用gui
let eventObj = {
  Fullscreen: function() {
    document.body.requestFullscreen()
  },
  ExitFullscreen: function() {
    document.exitFullscreen()
  }
}

//创建gui
const gui = new GUI()
//添加按钮  将创建对象的以及对象设计函数最为参数
gui.add(eventObj, "Fullscreen")
gui.add(eventObj, "ExitFullscreen")

`

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值