Выбраковка тыльной стороны коробки - PullRequest
0 голосов
/ 17 марта 2011

Предположим, у меня есть камера, определяемая ее положением и направлением, и прямоугольник, определяемый его центром и экстентами (три ортогональных вектора от центра бокса до центров граней).Лицо видно, когда его наружная поверхность обращена к камере, и невидимо, когда ее внутренняя поверхность обращена к ней.

Кажется очевидным, что в зависимости от положения и ориентации ящика могут быть видны 1-3 грани ящика.Есть ли какой-нибудь умный способ определить, какие грани видны?Очевидное решение состоит в том, чтобы вычислить 6 точечных произведений нормали к лицу и вектора камеры лица для каждого лица.Есть ли лучший способ?

Примечание: будет использоваться перспективное проецирование, но я не думаю, что это имеет значение, свойство «камеры перед лицом» кажется независимым от проецирования.

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Единственным умом является то, что если лицо куба видно, то противоположное лицо определенно не видно.По крайней мере, в обычной перспективе.

Обратите внимание, что обратное может быть неверным: если лицо невидимо, то и лицо противника тоже может быть невидимым.Это потому, что тип проекции имеет значение.Представьте, что куб действительно близко к камере и смотрит прямо на одно лицо.Затем слегка поверните куб, и при параллельной проекции сразу же станет видна другая грань, а в перспективной проекции этого не произойдет.

2 голосов
/ 17 марта 2011

Я считаю, что описанный вами метод является нормальным способом сделать это. Это очень быстрый расчет, поэтому вам не стоит слишком беспокоиться о скорости. Это тот же метод, который они используют, чтобы уменьшить количество вычислений для алгоритмов пересечения лучей и треугольников. Если передняя часть лица не видна, метод не продолжает вычисления для этого лица. Смотрите эту статью для реализации этого алгоритма на С ++. Это в первой половине расчетов. http://jgt.akpeters.com/papers/MollerTrumbore97/code.html

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