0

我已经玩了 three.js 几个星期了,并且在光线投射方面几乎没有不一致的地方。这是一个简化版本,演示了我遇到的错误之一:

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

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

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

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

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

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

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

这是一个限制吗?如果是,有什么我可以使用的解决方法吗?

4

1 回答 1

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() );

三.js r.53

于 2012-12-14T15:12:52.020 回答