![]() |
hitTestPoint без отрисовки
У меня есть Vector.<Point>, составляющий фигуру. Как можно узнать, внутри ли фигуры определенная точка, не прибегая к отрисовке в Graphics для последующего вызова hitTestPoint? Довольно долго думал, мучал гугл и поисковил flahser-а.
Зачем нужно: Пишу собственный энджин для динамических теней, а чтобы во время перерисовки не производить излишние вычисления (Если не сделать эту заглушку, даже с проверкой на изменения вычисления загружают процессор слишком сильно), нужен механизм для отсеивания тех объектов, до которых свет не дотягивается. Использовать Graphics не хочу, ибо это на мой взгляд индусский способ :) |
Если вы опишете характеристики возможных фигур, станет проще.
|
Побить на треугольники и проверять на точку в треугольнике?
Плюс, если тормозит, то проверку сперва на AABB, т.е. попадает ли точка в прямоугольник, в котором находится треугольник (и/или вся фигура). Ещё можно как для широкой фазы оптимизации ввести, но думаю они уже не понадобятся. |
Цитата:
Цитата:
Процесс идет примерно так: 1. Весь экран заливается черным. 2. Происходит циклический вызов расчетов света для всех источников. 3. Рисуются освещенные области. 4. Рисуются тени в освещенных областях. |
Проверка на AABB - это быстрый способ откинуть не нужные (не принять нужные). Понятно, что не все ненужные откинутся и к тем, кто не откинется уже применять нормальную проверку.
Я не оч. понял, зачем нужно попадание именно точки, скорее отрезка (всё то же самое, только пересечение отрезка и треугольника и у отрезка есть свой AABB). Причем по факту нужна проверка на пересечение и "попадание в" двух фигур, возможно тут можно что-то попробовать хитрее. |
Отрезок - это две точки, не? Плюс пересечение отрезка с фигурой найти легко, а если фигура не пересекается ни с одной из сторон и полностью лежит в зоне освещения?
|
Отрезок это не две точки, в смысле, обе эти точки могут лежать вне фигуры, но пересечение будет. Нужно проверять именно ситуацию "пересечение или попадание внутрь".
|
можно предложить как самое простое и наверно, это будет быстрее чем резать на треугольники. Режьте на относительно маленькие прямоугольники. Экспериментально можно выяснить при каком размере прямоугольников артефакты будут приемлемыми.
|
Да, кстати, отрисовка в Graphics (а лучше наверное битмапдату, к ней много сравнительно быстрых функций прилагается) - не обязательно плохое решение. Потому как вся та математика про которую я пишу - она оч. дурная по многим параметрам.
|
Попробовал все-таки графические просчеты, решил не насиловать мозги себе и вам. Остался недоволен тем, что использовал-таки такой способ, но зато теперь все нормально. Тему можно закрыть, но если некоторым все-таки захочется попарится по поводу "пересечения или попадания внутрь" - велкам. :)
|
| Часовой пояс GMT +4, время: 04:47. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.