首页 > 解决方案 > 如何获得两个不同非索引缓冲几何的两个不同面之间的交集?

问题描述

如何与非索引缓冲区几何相交?我想检测两个不同的非索引缓冲几何的两个不同面之间的交集。我从每个面的中间设置光线,但光线投射器不适用于非索引几何体。

我想看到这样的结果: 在此处输入图像描述

非常感谢!

我的代码


var box = new THREE.Mesh(geometry.toNonIndexed(), material);

var raycaster = new THREE.Raycaster();
var intersects = [];

var pos = box.geometry.attributes.position;
var ori = new THREE.Vector3();
var dir = new THREE.Vector3();

var a = new THREE.Vector3(),
  b = new THREE.Vector3(),
  c = new THREE.Vector3(),
  tri = new THREE.Triangle();



var faces = pos.count / 3;
for (let i = 0; i < faces; i++) {
  a.fromBufferAttribute(pos, i * 3 + 0);
  b.fromBufferAttribute(pos, i * 3 + 1);
  c.fromBufferAttribute(pos, i * 3 + 2);
  tri.set(a, b, c);
  tri.getMidpoint(ori);
  tri.getNormal(dir)
  // scene.add(new THREE.ArrowHelper(raycaster.ray.direction, raycaster.ray.origin, 30, 0xff0000));
  raycaster.set(ori, dir);
  intersects = raycaster.intersectObject(box, true);

  if (intersects.length > 0) {

    console.log(intersects[0]);

  }
}

标签: javascriptthree.jsintersectionraycastingface

解决方案


推荐阅读