dat.GUI

dat.GUI的大致源碼我並沒有認真看,只知道他似乎是使用了一個controllers.factory來判斷你所加入的Controller是哪一類型,anyway,這裡就整理下使用方式。

基本上使用相當簡單,你只要把物件丟給add()就能夠判斷並控制你的數值,在這裡以json格式為例,建構dat.GUI()後使用add()他就能判定你所使用的Controller或Folder了。

var test = {
    //想要丟給gui的參數與初始值
    text : 'text',
    speed : 0.8,
    boolean : false,
    slider1: 2,
    slider2: 0,
    slider3: 5,
    slider4: 5,
    menu:'menu',
    color0 : "#ffae23", // CSS string
    color1 : [ 0, 128, 255 ], // RGB array
    color2 : [ 0, 128, 255, 0.3 ], // RGB with alpha
    color3 : { h: 350, s: 0.9, v: 0.3 }, // Hue, saturation, value
};
gui = new dat.GUI();
gui.add(test, 'text');//新增text
var slider = gui.addFolder('slider');//新增Folder
    slider.add(test, 'slider1').step(5); // 增加量
    slider.add(test, 'slider2', -5, 5); // 上線和下限
    slider.add(test, 'slider4').min(0).step(0.25); // Mix and match
    slider.add(test, 'slider4').min(0).max(10).step(0.25); // Mix and match
gui.add(test, 'menu', [ 'test1', 'test2', 'test3' ] );//下拉選單
gui.add(test, 'boolean');//布林值
var color = gui.addFolder('color');
    color.addColor(test, 'color0');
    color.addColor(test, 'color1');
    color.addColor(test, 'color2');
    color.addColor(test, 'color3');
color.open();//Folder初始是打開的
slider.close(); //Folder初始是關閉的

如何更變數值?

以json為例,使用onChange()

var geometry = new THREE.BoxGeometry(1,1,1);
var material = new THREE.MeshBasicMaterial( {color:0xffffff} );
cube = new THREE.Mesh(geometry,material);
cube.rotation.z+=10;
cube.rotation.x+=10;
scene.add(cube);

var test = {
    //想要丟給gui的參數與初始值
    cube : 'cube',
    scale_x: 1,
    scale_y: 1,
    scale_z: 1,
};
gui = new dat.GUI();
gui.add(test, 'cube');//新增text
var scale = gui.addFolder('scale');
var s_x = scale.add(test,'scale_x').min(0).max(5).step(0.1);
var s_y = scale.add(test,'scale_y').min(0).max(5).step(0.1);
var s_z = scale.add(test,'scale_z').min(0).max(5).step(0.1);
s_x.onChange(function(x){ cube.scale.x = x;});
s_y.onChange(function(y){ cube.scale.y = y;});
s_z.onChange(function(z){ cube.scale.z = z;});

以物件為例:

var geometry = new THREE.BoxGeometry(1,1,1);
var material = new THREE.MeshBasicMaterial( {color:0xffffff} );
cube = new THREE.Mesh(geometry,material);
cube.rotation.z+=10;
cube.rotation.x+=10;
cube.name = "cube1";
scene.add(cube);

gui = new dat.GUI();
gui.add(cube, 'name');//新增text
var scale = gui.addFolder('scale');
scale.add(cube.scale,'x').min(0).max(5).step(0.1);
scale.add(cube.scale,'y').min(0).max(5).step(0.1);
scale.add(cube.scale,'z').min(0).max(5).step(0.1);

參考資料:

https://www.youtube.com/watch?v=8xFYBjXKYgE&feature=iv&src_vid=PcsJAy-VRts&annotation_id=annotation_2837750455
http://workshop.chromeexperiments.com/examples/gui/#1--Basic-Usage

results matching ""

    No results matching ""