Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js:Object3D添加到场景中,附加到另一个Object3D';t更新对翻译的立场_Three.js - Fatal编程技术网

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!:)