我已经玩了三个.js几个星期了,在光线投射方面几乎没有不一致的地方。这是一个简化版本,演示了我发现的错误之一:
http://jsfiddle.net/eMrhb/12/
例如,摄像机被添加到球体网格中,以便进一步使用 TrackBallControl。
scene.add(mesh);
mesh.add(camera);
在球体上单击几次并打开控制台,我们没有看到光线和网格之间的预期交集。
将摄像机添加到场景 (http://jsfiddle.net/eMrhb/9/),可以解决问题:
scene.add(mesh);
scene.add(camera);
但我可以在场景对象和摄像机之间使用更复杂的层次结构来满足我的需求。
这是一个限制吗?如果是,我可以使用任何解决方法吗?
是的,这是可以修复的。
如果摄像机是另一个旋转和/或平移对象的子对象,则必须在光线投射中使用不同的图案。
而不是这种熟悉的模式:
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() );
三.js R.53