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", -20.0, 20.0, 0.001).onChange( moveObject ).listen()
gui.add(position, "z", -20.0, 20.0, 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.x, position.y, position.z)
}
编辑:一位朋友给了我答案!需要将对象的新位置设置为,
而不是像这样:moveObject()
position.x, position.y, position.z
position
function moveObject() {
if (pickedObj) {
pickedObj.position.set( position.x, position.y, position.z )
}
window.pickedObj = pickedObj
console.log('set new position', position.x, position.y, position.z)
}
♂️</p>
解决方案
推荐阅读
- c# - 棱镜 8,WPF C# 中的 IDialogWindow keynotfound 异常
- android - 如何在 android 模拟器 API 30 (Android R) 上编辑主机文件
- mapbox - Mapbox Tileset 缺少数据中存在的特征
- python - 如何产生一个随机选择的结果,但也将查询与数组中的结果部分匹配
- android - View Pagger 同时加载两个子数据
- javascript - 如何在 Javascript XPath 中为 KML 文件生成命名空间
- node.js - 关系数据库的排队系统并发问题
- c# - StreamWriter 输出 ... 在 .txt 文件的末尾
- angular - 环内垫表角材料
- jenkins-plugins - Jenkins 警告 NG 警告未显示在文件中