我想用鼠标点击网格中的一个面。 使用ObjLoader和MtlLoader(附加)加载网格 单击网格时,有时会检测到交叉点,但有时不会检测到交叉点。
附加here是一个基于webgl_interactive_cubes.html和.obj文件的小型自包含示例。 如果将变量loadCubes设置为true,则原始示例将按预期运行,即检测到交叉点。 如果将变量loadCubes设置为false,则会加载obj文件,但不会检测到交叉点。
谢谢, 阿夫纳
P.S。 我看过的相关链接: 类似的问题描述:here和here,code pattern,raycasting documentation
答案 0 :(得分:0)
THREE.Raycaster()
有.intersectObjects ( objects, recursive )
方法。
文档说明了这种方法的参数(如果仔细观察):
objects - 要检查与光线交叉的对象。
recursive - 如果为true,它还会检查对象的所有后代。否则它只检查与对象的交叉。默认值为false。
THREE.OBJLoader()
,返回THREE.Group()
个对象,其THREE.Mesh()
属性中包含.children
个对象。
所以你的交叉检查应该是这样的:
var intersects = raycaster.intersectObjects( scene.children, true );