Учитывая усеченный вид (определяемый x, y, z положением камеры, поворотом [0-360) и шагом [0-180), а также углом обзора (например, 45)), что является (желательно самым быстрым)Java-код для определения того, находится ли прямоугольник (определяемый двумя противоположными угловыми точками) частично или полностью в пределах этого усеченного конуса?
Точнее, как я могу выполнить следующее?
static boolean isBoxInFrustum(float cx, float cy, float cz, // Vector camera,
float rotation, float pitch, float angle,
float p1x, float p1y, float p1z, // Vector point1,
float p2x, float p2y, float p2z) { // Vector point2
//...
}
A C ++реализацию можно найти по адресу http://www.lighthouse3d.com/tutorials/view-frustum-culling/
edit: вот 2-я версия, которая состоит всего из 4 строк и кажется мне достаточно простой для понимания с первого взгляда - как ее можно изменить, чтобы она была 3D-проверкой?
static boolean isPointInFrustum(
Vector cam, float rot, float pitch, float ang, Vector point) {
Vector diff = cam.minus(point);
float deg = Maths.arctan(diff.y, diff.x) + rot + 360;
deg %= 360;
return (deg > 180-ang && deg < 180+ang);
}