【发布时间】:2020-06-24 14:09:55
【问题描述】:
我有一个包含 2 个 3DPoint 的虚拟框,其中一个是最小值 (x,y,z),第二个是最大值 (x,y,z)
我有一条带有中心点和方向矢量的射线
如何检查向量是否与此虚拟框相交
(dotProduct、crossProduct、distance等方法我都有)但是我不知道我需要如何开始查找是否有交点,
在附加图像中,我尝试显示 2 种状态,一种是光线有相交,另一种没有。 如何通过代码找到它
现在如果有交叉点,我只需要查找布尔值,实际上我不需要找到这些点。
public class BoundaryVolume {
public Point3D min;
public Point3D max;
....
public boolean boundingIntersection(Ray ray) {
//Point3D p0 = ray.get_POO();
// Vector v = ray.get_direction();
// Vector v1 = min.subtract(p0);
// Vector v2 = max.subtract(p0);
// double s1 = v.dotProduct(v1.crossProduct(v2).normalized());
// if (isZero(s1)) return false;
}
}
雷:
public class Ray {
private Point3D _POO;
private Vector _direction;
....
}
【问题讨论】:
-
盒子是否总是 AABB(轴对齐)?检查一下:Cone to box collision 您可以使用
line closest(axis a0,convex_mesh m0)并测试返回的行是否长度为零。您可以对其进行很多优化,因为它适用于通用凸网格,而不仅仅是 AABB ...
标签: java geometry raytracing