检查框内是否有 3D 点

Check if 3D point inside a box

我有一个由 8 个顶点组成的框,可以在任何方向缩放或旋转,所以我对每个变换的顶点应用变换矩阵,我有中心、大小和从中心到 X、Y 和 Z 的方向,我如何检查框内是否有任何 3D 点?

如果你有:

vec3 center; // Center of the box.
vec3 dx, dy, dz; // X,Y, and Z directions, normalized.
vec3 half; // Box size in each dimension, divided by 2.

vec3 point; // Point to test.

那么测试就这么简单:

vec3 d = point - center;
bool inside = abs(dot(d, dx)) <= half.x &&
              abs(dot(d, dy)) <= half.y &&
              abs(dot(d, dz)) <= half.z;

点积的主要 属性 是事实 X⋅Y == |X|⋅|Y|⋅cos(angle_formed_by_X_and_Y).

如果 Y 被归一化,那么 X⋅Y 本质上就是 XY 上的投影长度(当由 XY 是钝的)。一旦你有了投影长度,你只需要将它们的绝对值与相应的盒子的半边距进行比较。