gibsonen, допустим frustum- куб с размером 1, с осями воль осей x,y,z, и центром в (0,0,0).
Для него матрица - это тупо единичная матрица (просто смотрим, что у E*vector каждая координата по модулю меньше 1). Эту матричку можно помасштабировать по осям - тогда размеры фрустума изменятся и из него можно сделать параллелепипед нужного размера. (Там для удлиннения вдоль оси в 2 раза надо масштаб наоборот делить на 2). Потом эту матрицу можно домножить на матрицы поворота, перемещения и получить frustum, который повёрнут и расположен как надо.
С перспективным искажением посложнее, но идея примерно такая же.
> Я разобрался как определить находится ли точка внутри фрустума или нет. Сделал это так: просто вычислял расстояние до каждой из 6 плоскостей, если оно окажется отрицательным, то точка лежит не внутри фрустума. Реализовал это все во фрагментном шейдере.
Ого ты затейник. Вместо этого можно сделать одну-единственную специальную матрицу. Умножать позицию на неё, и если полученный вектор какой-нибудь из координат x,y,z лежит не в интервале [-1,1], то точка снаружи.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Для него матрица - это тупо единичная матрица (просто смотрим, что у E*vector каждая координата по модулю меньше 1). Эту матричку можно помасштабировать по осям - тогда размеры фрустума изменятся и из него можно сделать параллелепипед нужного размера. (Там для удлиннения вдоль оси в 2 раза надо масштаб наоборот делить на 2). Потом эту матрицу можно домножить на матрицы поворота, перемещения и получить frustum, который повёрнут и расположен как надо.
С перспективным искажением посложнее, но идея примерно такая же.