Просмотр усечённой коробки на Java - PullRequest
1 голос
/ 15 июня 2011

Учитывая усеченный вид (определяемый 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);
}

1 Ответ

0 голосов
/ 15 июня 2011

Помимо основного синтаксиса, чем код Java отличается от кода C ++? Я заметил, что код C ++ на этом сайте намного более объектно-ориентирован, чем ваш интерфейс выше. Разве вы не можете создать класс FrustumR, как в коде Lighthouse, и класс Vec3, а затем добавить метод:

int FrustumR.pointInFrustum(Vec3 p)

Поскольку тело этого метода не имеет дело с указателями (только арифметика), вы должны быть в состоянии вставить его, и он будет работать в Java.

Если по каким-либо причинам вы не можете реализовать эти классы, вы сможете преобразовать код C ++, изменив ссылки на члены этих классов в ссылки на ваши аргументы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...