Three.js - dat.GUI库的使用详解:下(进阶用法)
四、设置控制项标签文字
默认情况下每个控制项左侧的标签显示的是对应的属性名,我们可以通过 name 方法设置成其他的文字(中文也是支持的)

var controls = new function () { this.speed = 1; }; var gui = new dat.GUI(); gui.add(controls, 'speed', 0, 10).name("旋转速度");
五、控制项分组
如果控制面板上的项目太多,可以考虑将一些功能近似的控制项分到一个分组文件夹中,这样可以让结构更加清晰。

var controls = new function () { this.rotationSpeed = 0.02; this.x = 1; this.y = 1; this.z = 1; this.width = 50; this.height = 60; }; var gui = new dat.GUI(); //第一个分组 var f1 = gui.addFolder('Position'); f1.add(controls, 'x'); f1.add(controls, 'y'); f1.add(controls, 'z'); //第二个分组 var f2 = gui.addFolder('Size'); f2.add(controls, 'width'); f2.add(controls, 'height'); //第二个分组默认打开 f2.open();
六、存储模式
1,开启存储功能模式
(1)使用 remember 方法可以开启 GUI 的存储模式(而且可以分组存储)
var controls = new function () { this.speed = 1; }; var gui = new dat.GUI(); gui.remember(controls); gui.add(controls, 'speed', 0, 5);
2,存储模式介绍
(1)存储模式开启后效果如下,每个控制项点击“Revert”按钮可以还原成默认值。

(2)点击“Save”可以将当前面板设置的值保存成默认值。点击“New”可以新建一个配置分组。通过下拉框可以切换各个分组(分组切换时控制项的值也会随之改变)。

(3)点击齿轮图标可以看到对应配置分组保存的值。

3,初始化时导入分组配置值
我们也可以把之前保存的分组配置数据在初始化时导入。
var controls = new function () { this.rotationSpeed = 0.02; this.speed = 1; }; var gui = new dat.GUI({ load:{ "preset": "Default", "closed": false, "remembered": { "Default": { "0": { "speed": 2.157493649449619 } }, "Custom1": { "0": { "speed": 1 } } }, "folders": {} } }); gui.remember(controls); gui.add(controls, 'speed', 0, 5);
七、获取面板的DOM对象
通过 gui.domElement 我们可以获取到控制面板原生 dom 对象。比如我们将面板位置改成页面左上角。

var controls = new function () { this.speed = 1; }; var gui = new dat.GUI(); gui.add(controls, 'speed', 0, 5); gui.domElement.style = 'position:absolute;top:0px;left:0px';
八、从 GUI 外部控制配置项
如果我们想不通过操作控制面板,而是从外部修改控制项数据。可以让控制项调用 listen 方法,这样当我们改变数据时,也会同步到面板里。
(1)样例代码
var controls = new function () { this.speed = 1; }; var gui = new dat.GUI(); gui.add(controls, 'speed', 0, 10).listen(); setInterval(function() { controls.speed = Math.random() * 10; }, 500);
(2)可以看到控制面板中 speed 项的值每隔 500ms 就会自动改变一次

九、创建多个 GUI 对象
我们可以通过构造函数 dat.GUI() 创建多个 GUI 对象,每个对象对应的都是一个独立的控制面板。
(1)样例代码
var controls = new function () { this.rotationSpeed = 0.01; this.x = 0; this.y = 0; this.z = 0; }; var gui = new dat.GUI(); gui.add(controls, 'x', -10, 10); gui.add(controls, 'y', -10, 10); gui.add(controls, 'z', -10, 10); var gui2=new dat.GUI();//创建GUI对象 gui2.domElement.style = 'position:absolute;top:0px;left:0px;width:50px'; gui2.add(controls,'rotationSpeed',{低速: 0.005, 中速: 0.01,高速: 0.1});
(2)我们创建两个 GUI 对象,第一个位于默认的右上角位置,第二个放置在界面左上角。效果图如下:

这个真不错!受教了,谢谢!
一个问题,如果想让gui隐藏到右边,而不是上边,有什么办法可以实现吗?
终于有人写这个了