根据所选对象更新dat.gui

时间:2014-08-04 22:01:35

标签: javascript three.js dat.gui

current working code

我试图弄清楚如何更新/更改/刷新dat.gui以反映我当前的选择。我的目标是生成一些随机的立方体,然后选择一个多维数据集进行操作,如:旋转,缩放,更改位置等。

第一步是能够选择一个多维数据集并能够控制来自dat.gui的任何东西。在下面的示例中,我只想显示所选对象的名称。我觉得如果我解决了这个问题,我可以添加方法来控制旋转,位置等。

I am trying to achieve something like this,但此代码陈旧且难以理解。

controller = new THREE.Object3D();
controller.objects = [];
controller.scene = scene;
controller.gui = gui;
controller.color = 0xFFFFFF;
controller.number_of_objects = controller.objects.length;
controller.selected_cube = 'test123';


controller.createNew = function() {
    var cube = new THREE.Mesh(
            new THREE.BoxGeometry(5, 5, 5),
            new THREE.MeshBasicMaterial({
                color: Math.random() * 0xffffff,
            opacity: 0.5})
    );

    cube.position.x = Math.random() * (world_size * 2) - world_size;
    cube.position.z = Math.random() * (world_size * 2) - world_size;
    cube.name = 'cube_' + controller.objects.length;

    controller.scene.add(cube);
    controller.objects.push(cube);
    controller.number_of_objects = controller.objects.length;
    controller.selected_cube = cube.name;

};

gui.add(controller, 'number_of_objects').listen();
gui.add(controller, 'selected_cube').listen();
gui.add(controller, 'createNew');

1 个答案:

答案 0 :(得分:3)

我已经分叉了您的示例并添加了代码,以便所选的多维数据集显示在dat.GUI控件中:

http://jsfiddle.net/Fresh/5vbkub4v/

实现此目的的代码在这里:

    if (intersects.length > 0) {
        var selectedObject = intersects[0].object;
        selectedObject.material.color.setHex(Math.random() * 0xffffff);

        // listen() has already been applied to the dat.GUI selected_cube controller
        // so updating the value of selected_cube will cause the dat.GUI view
        // to be automatically updated.
        controller.selected_cube = selectedObject.name;

        var particle = new THREE.Sprite(particleMaterial);
        particle.position.copy(intersects[0].point);
        particle.scale.x = particle.scale.y = 2;
        scene.add(particle);
    }

这有效,因为:

gui.add(controller, 'selected_cube').listen();

已经定义,自动更改dat.GUI selected_cube变量的值 反映在控制面板中。