【Threejs】从零开始(六)--GUI调试开发3D效果

请先完成前置步骤再进行下面操作:【Threejs】从零开始(一)--创建threejs应用-CSDN博客

一.GUI界面概述

GUI(Graphical User Interface)指的是图形化用户界面,广泛用在各种程序的上位机,能够通过简单的操作和按钮就可以调用底层代码,方便我们使用和展示结果。写好了底层的代码后我们就可以制作一个GUI界面来打包和展示。

简单来说就是功能的一个集合模块。

二.GUI的简单使用

1.导入GUI

javascript 复制代码
import {GUI} from 'three/examples/jsm/libs/lil-gui.module.min.js'  // 导入GUI

2.创建GUI

javascript 复制代码
const gui = new GUI();

3.控制立方体位置的控制器

gui.add(cube.position, 'x', 最小值,最大值, 步数).name('立方体X位置');

onFinishChange是当你滑动结束时执行一次函数,可以输出滑动的结果。

onChange是数值改变时执行一次函数,可以输出滑动的结果。

javascript 复制代码
//控制立方体位置
gui.add(cube.position, 'x', -5, 5, 1).name('立方体X位置');
gui.add(cube.position, 'y', -5, 5, 1).name('立方体Y位置').onFinishChange((val) => {
  console.log('立方体Y位置',val)
})
;
gui.add(cube.position, 'z', -5, 5, 1).name('立方体Z位置').onChange((val) => {
  console.log('立方体Z位置',val)
})
;

4.添加文件夹(归类)

通过addFolder()方法可以将同一类型的放到同一个文件下,方便管理。

javascript 复制代码
//创建文件夹
let folder = gui.addFolder('立方体位置');
//控制立方体位置
folder.add(cube.position, 'x', -5, 5, 1).name('立方体X位置');
folder.add(cube.position, 'y', -5, 5, 1).name('立方体Y位置').onFinishChange((val) => {
  console.log('立方体Y位置',val)
});
folder.add(cube.position, 'z', -5, 5, 1).name('立方体Z位置').onChange((val) => {
  console.log('立方体Z位置',val)
});

5.调用方法

比如想实现全屏展示和退出全屏。

先创建个数组:

javascript 复制代码
let eventObject = {
  fullscreen:function(){
    document.body.requestFullscreen()
  },
  exitFullscreen:function(){
    document.exitFullscreen()
  },
}

调用:

javascript 复制代码
// 创建gui
const gui = new GUI();
gui.add(eventObject,'fullscreen').name('全屏')
gui.add(eventObject,'exitFullscreen').name('退出全屏')

比如控制立方体颜色:

javascript 复制代码
//控制立方体颜色
let colorParms = {
  color: 0x00ff00
}
folder.addColor(colorParms, 'color').name('立方体颜色').onChange((val) => {
  cube.material.color.set(val)
})

控制立方体材质:

javascript 复制代码
//控制立方体材质
folder.add(parentMaterial,'wireframe' ).name('父元素立方体材质');
相关推荐
兆子龙3 分钟前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构
兆子龙44 分钟前
用 Auto.js 实现挂机脚本:从找图点击到循环自动化
前端·架构
SuperEugene1 小时前
表单最佳实践:从 v-model 到自定义表单组件(含校验)
前端·javascript·vue.js
昨晚我输给了一辆AE861 小时前
为什么现在不推荐使用 React.FC 了?
前端·react.js·typescript
不会敲代码11 小时前
深入浅出 React 闭包陷阱:从现象到原理
前端·react.js
不会敲代码11 小时前
React性能优化:深入理解useMemo和useCallback
前端·javascript·react.js
Dilettante2581 小时前
我的 Monorepo 实践经验:从基础概念到最佳实践
前端·前端工程化
只会cv的前端攻城狮1 小时前
Elpis-Core — 融合 Koa 洋葱圈模型实现服务端引擎
前端·后端
Java小卷2 小时前
流程设计器为啥选择diagram-js
前端·低代码·工作流引擎
HelloReader2 小时前
Isolation Pattern(隔离模式)在前端与 Core 之间加一道“加密网关”,拦截与校验所有 IPC
前端