在Three.js中动态更改Mesh后的光线投射

时间:2018-02-07 11:26:32

标签: javascript three.js raycasting

我有一个从另一个网格克隆的网格。但克隆后,我翻译并旋转它。然后做一个光线投射点,但它没有按预期工作。它在平移和旋转之前与原始位置保持交叉。示例代码如下

const raycaster = THREE.Raycaster()
const proposedModel = model.clone()
proposedModel.translateX(1)
proposedModel.translateY(1)
proposedModel.translateZ(1)
const q = new THREE.Quaternion(
    -0.847,
    -0.002,
    -0.505,
     0.168
)
proposedModel.applyQuaternion(q)

const point = new THREE.Vector3(1,1,1)
raycaster.set(point, new THREE.Vector3(1,1,1))
const intersects = raycaster.intersectObject(object) // It keep intersecting with original position

如果有任何帮助,很高兴,谢谢!

1 个答案:

答案 0 :(得分:1)

转换后从网格调用updateMatrixWorld()将解决问题。归功于@ prisoner849

proposedModel.updateMatrixWorld()

原因是

  

对象的矩阵存储对象相对于的变换   对象的父母;获得对象在世界中的转变   坐标,你必须访问对象的Object3D.matrixWorld。

     

当父对象或子对象的转换发生变化时,   您可以请求更新子对象的matrixWorld   调用updateMatrixWorld()。

在此查看详细信息https://threejs.org/docs/#manual/introduction/Matrix-transformations