Three.js:Object3D添加到场景中,附加到另一个Object3D';t更新对翻译的立场
我的代码的逻辑如场景中包含的Three.js:Object3D添加到场景中,附加到另一个Object3D';t更新对翻译的立场,three.js,Three.js,我的代码的逻辑如场景中包含的object3D,双击“添加行”(使用BufferGeometry)。 我使用Raycasterintersect获取object3D。 我的补充方式是: scene.add( newLine ); newLine.updateMatrixWorld(); THREE.SceneUtils.attach( newLine, scene, intersects[0].object ); 下面是我的mousemove代码,它帮助我在XZ平面中移动object3D fun
object3D
,双击“添加行”
(使用BufferGeometry
)。
我使用Raycaster
intersect获取object3D
。
我的补充方式是:
scene.add( newLine );
newLine.updateMatrixWorld();
THREE.SceneUtils.attach( newLine, scene, intersects[0].object );
下面是我的mousemove
代码,它帮助我在XZ平面中移动object3D
function onDocumentMouseMove( event ) {
var mouseX = ( event.clientX / window.innerWidth ) * 2 - 1;
var mouseY = - ( event.clientY / window.innerHeight ) * 2 + 1;
var mouse = new THREE.Vector2( mouseX, mouseY );
raycaster.setFromCamera( mouse, camera);
if (selection) {
var intersects = raycaster.intersectObject( plane );
selection.position.copy( intersects[0].point.sub( offset ));
}
}
没什么复杂的。简单的代码。这场运动进展顺利。我可以轻松地移动object3D
当我在抓取和移动控制台时检查object3D
的位置是否发生变化时,它正在改变应该发生的情况。但是我看不到行
的位置有任何变化,即新行
与我的代码一样。问题在于,除非我正在调用.updateWorldMatrix()
,否则根据三个文档,应该在每个渲染周期中自动调用它。我还是这么说。为什么当我拖动object3D
时,我的newLine
的位置明显随object3D
移动时,我无法获取其位置
为什么需要它?除非行的位置可以显示为更改,否则我无法更新附加到该行末尾的HTML元素。因此,改变立场势在必行。附加的Gif显示,当立方体/球体/圆锥体移动时,render(…)
会显示该立方体/球体/圆锥体的更改位置日志。但是,当为行记录相同内容时,它不会改变。如果有人能帮我解决这个问题,那就太棒了。多谢
编辑
当我将HTMLElement
直接附加到父对象object3D
时,它会显示预期的结果。当我移动object3D
时,它会移动。这是因为如前所述,当我移动它时,它的位置在渲染周期中不断更新
Gif:
行的.position
属性没有更改,因为其局部位置保持不变。由于线附着到父对象,因此其相对于父对象的相对位置不会更改,只有全局位置会更改。要获取行的全局位置
,可以使用.getWorldPosition()
方法:
//声明变量以存储世界位置
var worldPos=new-THREE.Vector3();
//获得线路的世界位置
行。getWorldPosition(worldPos);
//现在全局位置存储在Vec3中
控制台日志(worldPos);
好的,让我试着回去。谢谢。老兄,我早该想到的,tch!:)