检查盒子内是否有 3D 点

Moh*_*ssa 0 c++ 3d geometry glm-math

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

Hol*_*Cat 5

如果你有:

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.
Run Code Online (Sandbox Code Playgroud)

那么测试就这么简单:

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

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

如果Y被归一化,然后X?Y基本上给你的突起的长度XY(这是当且仅当负所形成的角度XY为钝角)。获得投影长度后,您只需要将它们的绝对值与框的相应半边进行比较。