微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 dat.gui 在 Three.js 中设置对象的位置

如何解决使用 dat.gui 在 Three.js 中设置对象的位置

我正在尝试使用 dat.gui 设置拾取对象的位置,即您单击对象,然后在 GUI 中更改位置。

我能够使用光线投射选择对象并将位置加载到 GUI 中。但是当我更改 GUI 中的值时,对象会飞出屏幕。最奇怪的是,当我在控制台中手动设置对象的位置时,例如 pickedobj.set.position( ... ),使用与 GUI 相同的值,对象将占据正确的位置。

相关代码如下:

  let pickedobj = null; // this is global variable 

  let position = new THREE.Vector3()
  const gui = new GUI().addFolder("Position")
  gui.add(position,"x",-20.0,20.0,0.001).onChange( moveObject ).listen()
  gui.add(position,"y","z",0.001).onChange( moveObject ).listen()
  gui.open()

  function updateGui( obj ) {
    if ( obj ) {
      if ( obj !== pickedobj ) { // we have clicked on a new object
        position.setFromMatrixPosition( obj.matrixWorld )
        pickedobj = obj
        window.pickedobj = pickedobj
        console.log( 'copy old position',position.x,position.y,position.z)
      }
    }
  }

  function moveObject() {
    if (pickedobj) pickedobj.position.set( position )
    window.pickedobj = pickedobj
    console.log('set new position',position.z)
  }

编辑:一位朋友给了我答案!
moveObject() 中需要将对象的新位置设置为 position.x,position.z 而不是 position 像这样:

function moveObject() {
    if (pickedobj) {
      pickedobj.position.set( position.x,position.z )
    }
    window.pickedobj = pickedobj
    console.log('set new position',position.z)
  }

??‍♂️

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。