Скорее всего, у вас уже есть трансформация для вашего кубоида, которая включает в себя позиционирование, масштабирование и вращение. Вы можете использовать это преобразование (точнее, его обратное), чтобы преобразовать любую точку в локальную систему координат кубоида. И там очень легко проверить, находится ли точка внутри куба.
Я сделаю несколько предположений здесь. Если они не соответствуют вашему сценарию, вам нужно немного изменить подход. Но принцип остается прежним. Я предполагаю, что стандартный куб выровнен по оси и находится между (0, 0, 0)
и (1, 1, 1)
. Я также предполагаю, что эта позиция относится к нижнему углу. Затем вы вычисляете общее преобразование (которое вы, скорее всего, уже имеете) как:
T = translate(position) * rotation * scale(size)
Если нам нужно выяснить, находится ли точка p
внутри куба, преобразуйте ее с обратной величиной T
:
pInLocalSpace = inverse(T) * p
И, наконец, проверьте, находится ли это в стандартном кубе:
if(pInLocalSpace.x >= 0 && pInLocalSpace.x <= 1
&& pInLocalSpace.y >= 0 && pInLocalSpace.y <= 1
&& pInLocalSpace.z >= 0 && pInLocalSpace.z <= 1)
; //point is inside the cube
else
; //point is outside of the cube