如何解决使用 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 举报,一经查实,本站将立刻删除。