当前位置:网站首页>three.js调试工具dat.gui使用
three.js调试工具dat.gui使用
2022-08-05 09:54:00 【Jedi Hongbin】
在three.js 观察物体变化不如网页方便 往往一次不能达到我们想要的位置 需要微调 而每次加载模型还需要一些时间 调试的时间就被加长了 相应的three.js的作者写了这个调试工具 方便three.js中调试。
安装
yarn add dat.gui
or
npm install --save dat.gui
导出
// CommonJS:
const dat = require('dat.gui');
// ES6:
import * as dat from 'dat.gui';
创建一个实例
const gui = new dat.GUI();
我更喜欢这样使用
import {
GUI } from "dat.gui";
const gui = new GUI();
总之选择你喜欢的方式创建一个gui实例开启调试吧
gui的工作方式
传入一个对象,对象中的键的值的类型决定调试工具的形式
比如 值是一个boolean值 对应的调试工具就展现一个复选框 该展现值的状态
如果 值是一个函数 对应就是一个按钮 点击按钮触发这个函数

以此来作为调试的格式 接下来 根据场景介绍常用的几种调试方式
修改物体的位置
物体的posiiton属性中的x,y,z决定位置

gui.add(mesh.position,'x')
把被修改的对象传进第一个参数 被修改的属性名(字符串形式)作为第二个参数 这样就是修改x轴坐标
gui.add(mesh.position,'x',0,100)
后面两个参数是最小值和最大值
这是类型定义 剩下的一个参数是一次变化多少
针对位置的修改可以封装一个函数 省的一行一行写
typescript
const positionkeys: ["x", "y", "z"] = ["x", "y", "z"];
export const guiPosiiton = (mesh: Object3D, range: number = 20, name?: string) => {
const {
name: meshName, type, uuid, position } = mesh;
// 新建一个文件夹
const fidld = gui.addFolder(name || meshName || type + uuid.substring(0, 5));
for (const key of positionkeys) {
fidld.add(position, key, position[key] - range, position[key] + range);
}
};
javascript
const positionkeys = ["x", "y", "z"];
export const guiPosiiton = (mesh, range = 20, name) => {
const {
name: meshName, type, uuid, position } = mesh;
// 新建一个文件夹
const fidld = gui.addFolder(name || meshName || type + uuid.substring(0, 5));
for (const key of positionkeys) {
fidld.add(position, key, position[key] - range, position[key] + range);
}
};
监听值的改变
gui.add({
count:0},'count',-10,10).onChange(val => {
xxx.xxx = val;
})
在onChange中获得当前的value
按钮
gui.add({
fn:() => console.log(123) },'fn')
点击 fn 调用fn这个函数 如果名字不想用属性名可以主动设置
gui.add({
fn:() => console.log(123) },'fn').name('打印')

修改纹理颜色
const material = new MeshPhongMaterial();
const params = {
color: 0xffffff
};
gui.addColor(params, "color").onChange((color) => {
material.color = color;
});


模式选择 – 选择器
const options = [1, 2, 3, 4];
gui.add({
难度: 1 }, "难度")
.options(options)
.onChange((val) => {
console.log("select", val);
});


字符串修改
gui.add({
name: "hongbin" }, "name");
常用的大概就这几个后续会慢慢补充更多调试方式
大家可以根据环境灵活调整 这个工具很有趣 建议大家尝试
边栏推荐
- MySQL advanced (twenty-seven) database index principle
- HStreamDB Newsletter 2022-07|分区模型优化、数据集成框架进一步完善
- 欧盟 | 地平线 2020 ENSEMBLE:D2.13 SOTIF Safety Concept(下)
- 仿SBUS与串口数据固定转换
- Redis源码解析:Redis Cluster
- 无题十一
- 无题九
- uniapp 连接ibeacon
- Hundred lines of code launch red hearts, why programmers lose their girlfriends!
- The difference between find, matches, lookingAt matching strings in matcher
猜你喜欢

阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!

数据中台建设(十):数据安全管理

NowCoderTOP35-40——持续更新ing

Assembly language (8) x86 inline assembly

Jenkins manual (2) - software configuration

leetcode: 529. Minesweeper Game

seata源码解析:TM RM 客户端的初始化过程

MySQL advanced (twenty-seven) database index principle

2.4G无线收发模块的应用

茄子科技CEO仇俊:以用户为中心,做用户真正需要的产品
随机推荐
PAT Grade B-B1020 Mooncake(25)
dotnet OpenXML 解析 PPT 图表 面积图入门
Egg framework usage (1)
CCVR eases heterogeneous federated learning based on classifier calibration
Development common manual link sharing
Pytorch深度学习快速入门教程 -- 土堆教程笔记(三)
Assembly language (8) x86 inline assembly
Happens-before rules for threads
只有一台交换机,如何实现主从自动切换之nqa
Microservice Technology Stack
无题四
Oracle临时表空间作用
Two-table query average grouping in sql server
入门 Polkadot 平行链开发,看这一篇就够了
Science bosses say | Hong Kong rhubarb KaiBin teacher take you unlock the relationship between the matrix and 6 g
MQTT X Newsletter 2022-07 | 自动更新、MQTT X CLI 支持 MQTT 5.0、新增 conn 命令…
Does flink cdc support synchronization from oracle dg library?
PAT Level B - B1021 Single Digit Statistics (15)
Seata source code analysis: initialization process of TM RM client
数据中台建设(十):数据安全管理