Если у вас есть:
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
фактически дает вам длину проекции X
на Y
(которая отрицательна, если угол, образованный X
и Y
, равентупой).Когда у вас есть длина проекции, вам просто нужно сравнить их абсолютные значения с соответствующими половинными экстентами вашего блока.