three.js中 界面控制器 dat.gui 使用

7 篇文章 0 订阅

1、安装

npm install dat.gui  gsap 

说明 gsap 是动画库

2、使用

import * as THREE from 'three'
//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// console.log(THREE, 'three')

// 导入动画库
import gsap from 'gsap'
// 导入 dat.gui
import * as dat from 'dat.gui'

// 目标:js控制画面全屏


//1.创建场景
const scene = new THREE.Scene()

//2.创建相机 角度  宽高比  近端  远端
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)

// 设置相机位置  x y z 
camera.position.set(0, 0, 10)

// 把相机添加到场景中
scene.add(camera)

// 添加物体
// 创建几何体
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1)
// 材质
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 })
// 根据几何体和材质创建物体
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)

const gui = new dat.GUI();
gui
  .add(cube.position, "x")
  .min(0)
  .max(5)
  .step(0.01)
  .name("移动x轴")
  .onChange((value) => { console.log(value, '修改的值') })
  .onFinishChange((value) => { console.log(value, '停下来修改的值') })
// 修改物体的颜色
const params = {
  color: "#ffff00",
  fn: () => {
    //让立方体动起来
    gsap.to(cube.position, { x: 5, duration: 2, yoyo: true, repeat: -1 })
  }
}
gui.addColor(params, "color").onChange((value) => {
  console.log("值被修改:", value)
  cube.material.color.set(value)
})
// 设置选项框
gui.add(cube, "visible").name("是否显示")
//设置按钮点击触发某个事件
//gui.add(params, "fn").name("立方体运动")

// 放到文件夹下 可收起
let folder=gui.addFolder("设置立方体")
folder.add(cube.material,"wireframe")
folder.add(params, "fn").name("立方体运动")

// 修改物体的位置
// cube.position.set(5,0,0)
// cube.position.x = 5

// 缩放
// cube.scale.set(5,5,5)
// cube.scale.x=5

// 旋转
// cube.rotation.set(Math.PI/4,0,0,"XYZ")
// cube.rotation.x=6
// 将几何体添加到场景当中
scene.add(cube);

// 初始化渲染器
const renderer = new THREE.WebGLRenderer()
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)
// console.log(renderer,'renderer')

// 将webgel渲染的canvas内容添加到body
document.body.appendChild(renderer.domElement)


// 使用渲染器,通过相机将场景渲染进来
// renderer.render(scene, camera)

// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement)
// 设置控制器的阻尼 更真实 惯性
controls.enableDamping = true


// 添加坐标轴辅助器

const axesHelper = new THREE.AxesHelper(5)
scene.add(axesHelper)


// 设置时钟
const clock = new THREE.Clock()



  window.addEventListener("dblclick", () => {
    // 双击控制屏幕进入全屏,退出全屏
    const fullScreenElement = document.fullscreenElement
    if (!fullScreenElement) {
      // 让画布对象全屏
      renderer.domElement.requestFullscreen()
    } else {
      // 退出全屏
      document.exitFullscreen()
    }
  })

function render () {
  controls.update()
  renderer.render(scene, camera);
  // 渲染下一帧的时候 调用 render函数
  requestAnimationFrame(render)
}
render()

// 监听画面变化,更新渲染画面
window.addEventListener("resize", () => {
  // 更新摄像头
  camera.aspect = window.innerWidth / window.innerHeight
  // 更新摄像机的投影矩阵
  camera.updateProjectionMatrix()

  // 更新渲染器
  renderer.setSize(window.innerWidth, window.innerHeight)
  // 设置渲染器的像素比
  renderer.setPixelRatio(window.devicePixelRatio)

})




3、效果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值