10

我尝试在下面的 three.js示例中使用dat.GUI

我只是做了以下代码更改来添加一个 GUI 来调整网格不透明度。

var loader=new THREE.VTKLoader();
loader.load ("models/vtk/bunny.vtk", function(geom){
var mesh = new THREE.Mesh(geom, material );
mesh.doubleSided=true;
mesh.position.setY(-0.09);
scene.add( mesh );

var gui = new dat.GUI();

var view = this;
view.Opacity = 0.2;

var maingui = gui.addFolder('Main');
var opacity = maingui.add(view, 'Opacity', 0, 1);
opacity.onChange( function(value) {
    mesh.material.opacity = value;
});

maingui.open();

animate();

现在,一旦我单击不透明度滑块,鼠标就会跟随滑块。我无法摆脱鼠标点击。

4

3 回答 3

26

在渲染器初始化块之后移动控件初始化块,并更改此行:

controls = new THREE.TrackballControls( camera );

对此:

controls = new THREE.TrackballControls( camera, renderer.domElement );
于 2012-07-03T10:46:00.010 回答
1

老主题,但我只是有一个类似的问题,以前的解决方案不适合我的情况。为了修复它,我为 dat.gui 模块创建了一个特定的画布:

html部分:

<div id="my-gui-container"></div>

CSS部分:

#my-gui-container{
    position: absolute; 
    top: 0; 
    right: 0;
    z-index: 100;
}

JS部分:

this.gui = new dat.GUI({ autoPlace: false });

var customContainer = document.getElementById('my-gui-container');
customContainer.appendChild(this.gui.domElement);

使用这种方法,元素是隔离的,我不再有事件冲突。

编辑:有关更多详细信息,您在此处拥有所有代码https://github.com/quentinchap/threeJs-morphing-test

于 2016-12-28T10:33:06.597 回答
0
var clock = new THREE.Clock();
var trackballControls;


function render() {
stats.update();
        var delta = clock.getDelta();   
        trackballControls.update(delta);

        // render using requestAnimationFrame
        requestAnimationFrame(render);
        webGLRenderer.render(scene, camera);    
    }


    function trackBall(){
        trackballControls = new THREE.TrackballControls(camera, render.domElement) ;

        trackballControls.rotateSpeed = 1.0;
        trackballControls.zoomSpeed = 1.0;
        trackballControls.panSpeed = 1.0;
        //  trackballControls.noZoom=false;
        //trackballControls.noPan=false;
        trackballControls.staticMoving = true;
        //trackballControls.dynamicDampingFactor=0.3;
    }


        trackBall();

        render();

我将示例中所示的代码更改为“ THREE.TrackballControls(camera, renderer.domElement)”,但是当我使用它一次时我仍然会影响我的 GUI,并且不能从此刻取消选择它。是否有可能使用命令停用或取消选择活动的 GUI 部件?或类似“gui.deselect.all”的东西?

于 2015-01-29T16:41:16.313 回答