雷交叉和儿童相机

时间:2012-12-14 08:58:20

标签: three.js camera intersection raytracing

我已经玩了几个星期几个星期,并且在光线投射上几乎没有什么不一致。 这是一个简化版本,演示了我遇到过的一个错误:

http://jsfiddle.net/eMrhb/12/

将相机添加到球体网格中,以便进一步使用 TrackBallControl

scene.add(mesh);    
mesh.add(camera);

在球体上单击几次并打开控制台,向我们显示光线网格之间没有预期的交叉点。

将相机添加到场景(http://jsfiddle.net/eMrhb/9/),解决了问题:

scene.add(mesh);    
scene.add(camera);

但我可以在场景对象和相机之间使用更复杂的层次结构来满足我的需求。

这是一个限制吗?如果是,我可以使用任何变通方法吗?

1 个答案:

答案 0 :(得分:0)

是的,这是可以修复的。

如果相机是另一个被旋转和/或平移的物体的孩子,那么你必须在光线投射中使用不同的模式。

而不是这种熟悉的模式:

var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );

您必须使用此模式:

var position = camera.matrixWorld.getPosition().clone();
var ray = new THREE.Ray( position, vector.subSelf( position ).normalize() );

three.js r.53