问题而在three.js所例如使用dat.GUI(Issue while using dat.GUI

2019-06-25 23:55发布

我试图用dat.GUI在以下three.js所例子 。

我只是做了下面的代码更改添加一个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();

现在,当我点击透明度滑块鼠标只是跟着滑块。 我不能出来鼠标点击。

Answer 1:

移动渲染器初始化块之后初始化块中的控制,并改变这一行:

controls = new THREE.TrackballControls( camera );

为此:

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


Answer 2:

老问题,但我只是有一个类似的问题和以前的解决方案并不确定我的情况。 为了解决这个问题,我创建了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



Answer 3:

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”?



文章来源: Issue while using dat.GUI in a three.js example