在 three.js 示例中使用 dat.GUI 时出现问题
Posted
技术标签:
【中文标题】在 three.js 示例中使用 dat.GUI 时出现问题【英文标题】:Issue while using dat.GUI in a three.js example 【发布时间】:2012-07-03 04:51:29 【问题描述】:我尝试在下面三个.js中使用dat.GUIexample。
我只是做了以下代码更改以添加一个 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吗? 【参考方案1】:将控件初始化块移动到渲染器初始化块之后,并更改此行:
controls = new THREE.TrackballControls( camera );
到这里:
controls = new THREE.TrackballControls( camera, renderer.domElement );
【讨论】:
【参考方案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
【讨论】:
【参考方案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”的东西?
【讨论】:
以上是关于在 three.js 示例中使用 dat.GUI 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章