获取区域(3d 立方体)中的所有对象(网格)
Get all objects(meshes) in the area (3d cube)
我有一个管子系统。更准确地说,我从这段代码创建了一个管子
tube_color - 显然,管子的颜色,
spline_points - 大量的三个。矢量3对象,
段,半径段只是数字
var material = new THREE.MeshLambertMaterial( { color: tube_color, shading: THREE.SmoothShading } );
var spline = new THREE.SplineCurve3(spline_points);
var tube = new THREE.TubeGeometry(spline, segments, 10, radiusSegments, false, false);
var tubeMesh = new THREE.Mesh(tube, material);
scene.add(tubeMesh);
此代码在空间中创建一个特定的网格对象。对于每个网格,我可以使用 myMesh.geometry.vertices 拥有一个 Vector3 数组。
问题是:我在3D空间中具有要点。在这一点上,我创建了Cube,它确实与管子相交。例如,可以像这样创建此立方体
var cube = new THREE.CubeGeometry(xSize,ySize,zSize, 5, 5, 5);
var material = new THREE.MeshBasicMaterial({
color: 0xff0000,
opacity: 1,
wireframe: true,
transparent: false
});
var selectionMesh = new THREE.Mesh(cube, material);
scene.add(selectionMesh);
是否有可能至少找到与立方面积相交的对象(网格)?我知道在场景对象中我有所有的网格,我可以迭代它们,获取顶点,迭代它们,如果至少有一个它的点在立方面积上,则有一个条件。但我相信...我希望有一种方法/算法/魔法比这个更简单......
正如@WestLangley所建议的那样,这个问题的解决方案是构建八叉树。
octree=new THREE.Octree({
undeferred:false,
depthMax:Infinity,
objectsThreshold:8,
overlapPct:0.15
} );
并搜索它
var meshesSearch=octree.search( rayCaster.ray.origin, radiusSphere, true, rayCaster.ray.direction );
但是,要有特定的交集,我们需要提供递归标志
raycaster.intersectOctreeObjects( objects, true )
我最终对我的具体情况进行了更复杂的处理,但这足以解决当时的问题。
相关文章:
- 如何传递具有多个网格对象的数组
- 剑道网格-插入具有外部列的新对象失败
- 我该如何解决这个问题;参考网格”;在JavaScript中完成的对象数
- Three.js:我可以创建网格来替换很多对象吗
- 获取网格视图行中对象的类型
- 在三个.js中加载多个 Blender 导出的对象/网格 + 材质
- JQuery 可拖动 - 防止网格对象移动到同一位置
- 将现有的剑道网格绑定到新的 JSON 对象
- 在下拉列表中使用多个对象类型为数据网格提供筛选
- 从本地 json 对象加载数据的灵活网格
- 将本地 JSON 对象加载到网格中的 extjs
- 剑道网格 :对数组对象进行过滤
- 光滑网格 - 对复杂对象进行排序
- 使用控制器中对象的位置 x,y 创建一个动态网格或表格 - 引导程序,AngularJS
- 在WebGL中渲染多网格对象时,背景(画布)颜色将消失
- item(i)为null或不是带过滤选项的锁定网格中的对象(extjs3.4)
- Kendo序列化的Javascript数组网格对象属性在服务器上为null
- WebGL/Three.js一个复杂对象(网格)上的不同材质
- 如何创建nxm HTML5画布对象网格(彩色正方形)
- 获取区域(3d 立方体)中的所有对象(网格)