Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 光线相交与子相机_Three.js_Camera_Intersection_Raytracing - Fatal编程技术网

Three.js 光线相交与子相机

Three.js 光线相交与子相机,three.js,camera,intersection,raytracing,Three.js,Camera,Intersection,Raytracing,我已经使用three.js玩了几个星期了,在光线投射方面几乎没有不一致的地方。 下面是一个简化版本,演示了我遇到的一个bug: 相机被添加到球体网格中,以便进一步使用轨迹球控制 scene.add(mesh); mesh.add(camera); 在球体上单击几次并打开控制台,不显示光线和网格之间的预期交点 将摄影机添加到场景(),解决了以下问题: scene.add(mesh); scene.add(camera); 但是我可以在场景对象和相机之间使用更复杂的层次结构来满

我已经使用three.js玩了几个星期了,在光线投射方面几乎没有不一致的地方。 下面是一个简化版本,演示了我遇到的一个bug:

相机被添加到球体网格中,以便进一步使用轨迹球控制

scene.add(mesh);    
mesh.add(camera);
在球体上单击几次并打开控制台,不显示光线网格之间的预期交点

将摄影机添加到场景(),解决了以下问题:

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

three.js r.53

我不知道你为什么会被否决。这对我来说似乎是一个很好的问题……也许是因为你没有像你所说的那样,将相机直接添加到第二小提琴的场景中。请原谅我的(英语)错误,直接不是正确的词,我会解决这个问题。无论如何,谢谢你@WestLangley,我自己也在认真地质疑这个问题的相关性。听到你的消息真是松了一口气!这确实解决了问题:。非常感谢你。对于嵌套对象,将
camera.matrixWorld.getPosition().clone()总是这样做,还是我需要像其他对象一样通过讨厌的向量乘法和其他矩阵更新?我在维基上读到相机位置和目标会自动更新。这仅适用于本地位置吗?我相信此解决方案将按原样工作。我不清楚维基作者所指的引用是什么意思。如果您还有其他问题,请发布新问题。