当对象不属于场景时,Three.js 光线转换器交集为空

标签 three.js

我尝试通过创建网格并将它们作为更大几何体的一部分,并仅将单个几何体作为添加到场景中的对象来缩短项目的渲染时间。我认为我仍然能够通过原始网格体数组来管理对象的拾取,并将其传递给光线转换器。我使用了以下代码:

var vector = new THREE.Vector3( ( loc_x / window.innerWidth ) * 2 - 1, - ( loc_y / window.innerHeight ) * 2 + 1, 0.5 );
projector.unprojectVector(vector, camera);
var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
var objects = [];

var i = active_regions.length;
while (i--) {
  objects = objects.concat(active_regions[i].mesh_entities);
}
var intersects = raycaster.intersectObjects( objects );
if ( intersects.length > 0 ) {
  console.log("Intersection: " + intersects);
}

因此,在上面的代码中,active_regions 包含原始的各个网格,我动态创建一个数组来指定要从中选择的对象。不幸的是相交结果是空的。

如果我稍微修改我的项目,以便将所有这些网格实体单独添加到场景中,那么上面的代码就可以工作,并且我可以成功选择对象。不幸的是,整个场景渲染缓慢。

有什么好方法(或一些好方法)可以让我成功检查与光线的相交,而不减慢渲染速度?

谢谢!

最佳答案

您需要手动更新不在渲染场景中的对象的矩阵,因为它是渲染过程的一部分,因此如果您使用幻影场景,则不需要渲染它,只需在之前更新矩阵即可做交集:

scene_ghost.updateMatrixWorld(true);

关于当对象不属于场景时,Three.js 光线转换器交集为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15726560/

相关文章:

javascript - 括号符号不适用于 aframe

javascript - 文本几何作为对象属性

json - 我如何将 Maya 文件转换为 json 文件并将其与 Three.js 一起使用

three.js - 从 UV 坐标计算 3D 坐标

javascript - Three.js:对盒状几何体进行动画处理

java - 从 Java Web 应用程序导出 WebGL 3D 模型的推荐格式

javascript teechart曲线问题

javascript - 如何使用meteor将三个js代码放入单独的JS文件中

Three.js 后处理不适用于effectcomposer

three.js - Threejs 合并平面几何图形或从多个图像创建纹理