我有一个从另一个网格克隆的网格。但克隆后,我翻译并旋转它。然后做一个光线投射点,但它没有按预期工作。它在平移和旋转之前与原始位置保持交叉。示例代码如下
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
如果有任何帮助,很高兴,谢谢!
答案 0 :(得分:1)
转换后从网格调用updateMatrixWorld()将解决问题。归功于@ prisoner849
proposedModel.updateMatrixWorld()
原因是
对象的矩阵存储对象相对于的变换 对象的父母;获得对象在世界中的转变 坐标,你必须访问对象的Object3D.matrixWorld。
当父对象或子对象的转换发生变化时, 您可以请求更新子对象的matrixWorld 调用updateMatrixWorld()。
在此查看详细信息https://threejs.org/docs/#manual/introduction/Matrix-transformations