当前位置: 首页 > news >正文

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

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

一.GUI界面概述

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

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

二.GUI的简单使用

1.导入GUI

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

2.创建GUI

const gui = new GUI();

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

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

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

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

//控制立方体位置
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()方法可以将同一类型的放到同一个文件下,方便管理。

//创建文件夹
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.调用方法

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

先创建个数组:

let eventObject = {fullscreen:function(){document.body.requestFullscreen()},exitFullscreen:function(){document.exitFullscreen()},
}

调用:

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

比如控制立方体颜色:

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

控制立方体材质:

//控制立方体材质
folder.add(parentMaterial,'wireframe' ).name('父元素立方体材质');

http://www.lryc.cn/news/506534.html

相关文章:

  • Cocos Creator 试玩广告开发
  • 快速解决oracle 11g中exp无法导出空表的问题
  • selenium 报错 invalid argument: invalid locator
  • Flink2.0未来趋势中需要注意的一些问题
  • 机械鹦鹉与真正的智能:大语言模型推理能力的迷思
  • 本地电脑使用命令行上传文件至远程服务器
  • 【系统】Windows11更新解决办法,一键暂停
  • 34. Three.js案例-创建球体与模糊阴影
  • Qt同步读取串口
  • 如何用上AI视频工具Sora,基于ChatGPT升级Plus使用指南
  • 对象的状态变化处理与工厂模式实现
  • 关于IP代理API,我应该了解哪些功能特性?以及如何安全有效地使用它来隐藏我的网络位置?
  • 在Linux上将 `.sh` 脚本、`.jar` 包或其他脚本文件添加到开机自启动
  • [Maven]构建项目与高级特性
  • 【系统架构设计师】真题论文: 论数据分片技术及其应用(包括解题思路和素材)
  • 【bWAPP】XSS跨站脚本攻击实战
  • Ubuntu 22.04,Rime / luna_pinyin.schema 输入法:外挂词库,自定义词库 (****) OK
  • 多协议视频监控汇聚/视频安防系统Liveweb搭建智慧园区视频管理平台
  • 如何高效获取Twitter数据:Apify平台上的推特数据采集解决方案
  • 第二部分:进阶主题 15 . 安全管理 --[MySQL轻松入门教程]
  • 力扣hot100——双指针
  • 【代码随想录day58】【C++复健】 117. 软件构建(拓扑排序);47. 参加科学大会(dijkstra(朴素版)精讲)
  • 【NLP 16、实践 ③ 找出特定字符在字符串中的位置】
  • 费解的开关(bfs + 哈希表 or 递推)
  • C语言——实现求出最大值
  • 基于微信小程序的短视频系统(SpringBoot)+文档
  • Flutter 中 Sliver 的各种装饰器介绍与使用
  • 电感的基本概念
  • linux基于systemd自启守护进程 systemctl自定义服务傻瓜式教程
  • HTTP协议和接口测试详解