使用DAT.GUI .onChange函数

时间:2016-07-26 23:00:44

标签: three.js dat.gui

如果我的错误很明显,请道歉。几个星期前开始学习代码。大量搜索了答案。

尝试使用Dat.Gui控制在three.js中动画的图形方程的变量。通过将变量赋值为零,我能够看到gui是链接的,因为滑块上任何地方的叮当声都会立即调用预期的绘制方程(为简单起见,我用简单的抛物线代替了我更复杂的方程)。当按照希望再次点击gui滑块时,绘制的方程式也会消失,以便为重新绘制'重新绘制'方程式(由gui滑块确定的更宽或更细的抛物线),但它会引发这个错误:

" [.CommandBufferContext] RENDER警告:渲染计数或primcount为0。"

我已经能够重新排列代码,因此它不会抛出此错误,但它仍然不会调用方程式的下一个可见迭代....下面是成功绘制的代码抛物线,在下一个.onChange时移除它,但随后抛出上述错误......

init function + scene, camera setup, etc....

  gui = new DAT.GUI();
  gui_a = gui.add(this, 'a').min(0.01).max(5).step(0.01).name('Width');
  gui_a.onChange(function(value){createGraph();});
}

function createGraph(){
  if(graphLine) scene.remove(graphLine);
  var graphGeometry = new THREE.Geometry();
  while (x<20){
    var y = a*(Math.pow(x,2));
    next_x = x+0.05;
    next_y = a*(Math.pow(next_x,2));
    x=x+0.05;

  graphGeometry.vertices.push(
    new THREE.Vector3(x, next_y),
    new THREE.Vector3(next_x, next_y)
  );};
  graphLine = new THREE.Line(graphGeometry, material);
  scene.add(graphLine);
};

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

弄清楚我自己的问题......我想的很简单:'x'的值没有在creategraph();中重置。它被代码顶部的变量定义为“var x = -20”(在我的帖子中看不到......)。因此,图形的“第二次”渲染从x = 20开始,而不是恢复到原始的x = -20。