在three.js示例中使用dat.GUI时出现问题

10

我尝试在以下三.js example 中使用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();

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


你尝试在opacity.onChange函数中使用console.log了吗? - Neil
3个回答

26

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

controls = new THREE.TrackballControls( camera );

变为这样:

controls = new THREE.TrackballControls( camera, renderer.domElement );

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

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"的东西?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接