为了账号安全,请及时绑定邮箱和手机立即绑定

Three.JS - 自定义网格上的光线投射

Three.JS - 自定义网格上的光线投射

慕侠2389804 2021-12-23 15:52:06
我目前正在尝试在 Three.js 中对自定义创建的网格进行光线投射。虽然光线投射对于某些导入的网格来说很有吸引力,但它似乎根本不适用于我的自定义网格。经过一段时间的研究,我发现了自定义光线投射的一些典型问题,并尝试修复它们(updateMatrixWorld、双面材质…… - 请参阅下面的代码)。我正在使用以下函数进行光线投射:mouse.x = ((e.clientX - container.offsetLeft) / container.clientWidth) * 2 - 1;mouse.y = -((e.clientY - container.offsetTop) / container.clientHeight) * 2 + 1;rayCaster.setFromCamera(mouse, camera);var intersect = rayCaster.intersectObjects(scene.getObjectByName('loaded_object').children, true); // workingmesh_1.geometry.computeFaceNormals();mesh_1.updateMatrixWorld();var intersect_custom = rayCaster.intersectObjects([mesh_1], true); // not working虽然第一个相交按预期工作,但我的自定义相交不知何故根本不起作用 - 它总是返回一个空数组。我的假设是否正确,问题必须是我的自定义网格?所以这是我创建自定义网格的方式:material_k1.side = THREE.DoubleSide;var singleGeometry_1 = new THREE.Geometry();var mesh_1 = new THREE.Mesh(singleGeometry_1, material_k1);meshes[i].updateMatrix();singleGeometry_1.merge(meshes[i].geometry, meshes[i].matrix);mesh_1.updateMatrix();singleGeometry_1.verticesNeedUpdate = true;singleGeometry_1.elementsNeedUpdate = true;mesh_1 = new THREE.Mesh(singleGeometry_1, material_k1);还有什么问题?我真的很想知道,特别是因为它似乎不适用于我的自定义网格。
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

在尝试了很长时间后,我自己才发现问题。我的代码很好,除了缺少一行。

添加后

mesh_1.geometry.computeBoundingSphere();

我的代码按预期工作。

似乎光线投射也需要边界球体。
谢谢你的帮助!希望这可以帮助任何有同样问题的人。


查看完整回答
反对 回复 2021-12-23
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信