Issue while using dat.GUI in a three.js example

前端 未结 3 885
情话喂你
情话喂你 2021-01-02 05:56

I tried to use dat.GUI in the following three.js example.

I just did the following code changes to add a GUI to adjust mesh opacity.



        
相关标签:
3条回答
  • 2021-01-02 06:14

    Move the controls init block after the renderer init block, and change this line:

    controls = new THREE.TrackballControls( camera );
    

    to this:

    controls = new THREE.TrackballControls( camera, renderer.domElement );
    
    0 讨论(0)
  • 2021-01-02 06:25
    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();
    

    I changed my code as shown in the example to "THREE.TrackballControls(camera, renderer.domElement)" but I still effect my GUI when I used it once and can't deselect it from this moment. Is there any possibility to deactivate or to deselect the active GUI parts with a command? or something like "gui.deselect.all" ?

    0 讨论(0)
  • 2021-01-02 06:29

    Old subject but I just have a similar issue and previous solution wasn't ok for my case. To fix it I create a specific canvas for the dat.gui module:

    Html part:

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

    Css part:

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

    Js Part:

    this.gui = new dat.GUI({ autoPlace: false });
    
    var customContainer = document.getElementById('my-gui-container');
    customContainer.appendChild(this.gui.domElement);
    

    With this method the elements are isolate and I have no event conflict anymore.

    Edit: for more details you have all code here https://github.com/quentinchap/threeJs-morphing-test

    0 讨论(0)
提交回复
热议问题