Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   hitTestPoint без отрисовки (http://www.flasher.ru/forum/showthread.php?t=178915)

krabanek 02.05.2012 10:35

hitTestPoint без отрисовки
 
У меня есть Vector.<Point>, составляющий фигуру. Как можно узнать, внутри ли фигуры определенная точка, не прибегая к отрисовке в Graphics для последующего вызова hitTestPoint? Довольно долго думал, мучал гугл и поисковил flahser-а.
Зачем нужно: Пишу собственный энджин для динамических теней, а чтобы во время перерисовки не производить излишние вычисления (Если не сделать эту заглушку, даже с проверкой на изменения вычисления загружают процессор слишком сильно), нужен механизм для отсеивания тех объектов, до которых свет не дотягивается.
Использовать Graphics не хочу, ибо это на мой взгляд индусский способ :)

ChuwY 02.05.2012 11:19

Если вы опишете характеристики возможных фигур, станет проще.

-De- 02.05.2012 11:33

Побить на треугольники и проверять на точку в треугольнике?
Плюс, если тормозит, то проверку сперва на AABB, т.е. попадает ли точка в прямоугольник, в котором находится треугольник (и/или вся фигура). Ещё можно как для широкой фазы оптимизации ввести, но думаю они уже не понадобятся.

krabanek 02.05.2012 12:28

Цитата:

Сообщение от ChuwY (Сообщение 1077888)
Если вы опишете характеристики возможных фигур, станет проще.

Фигуры совершенно произвольные. Хотя в данный момент в основном тестирую на треугольниках и прямоугольниках.

Цитата:

Сообщение от -De- (Сообщение 1077893)
Побить на треугольники и проверять на точку в треугольнике?
Плюс, если тормозит, то проверку сперва на AABB, т.е. попадает ли точка в прямоугольник, в котором находится треугольник (и/или вся фигура). Ещё можно как для широкой фазы оптимизации ввести, но думаю они уже не понадобятся.

Я как раз и склоняюсь к разбиванию фигуры на треугольники с последующей проверкой. Проверку на AABB ввести можно, но это не решит проблему. Вот допустим источник света конусом. Объект не входит в конус, но удовлетворяет проверку AABB. Из-за этого будет наложена лишняя тень, которая может породить артефакты.
Процесс идет примерно так:
1. Весь экран заливается черным.
2. Происходит циклический вызов расчетов света для всех источников.
3. Рисуются освещенные области.
4. Рисуются тени в освещенных областях.

-De- 02.05.2012 13:28

Проверка на AABB - это быстрый способ откинуть не нужные (не принять нужные). Понятно, что не все ненужные откинутся и к тем, кто не откинется уже применять нормальную проверку.
Я не оч. понял, зачем нужно попадание именно точки, скорее отрезка (всё то же самое, только пересечение отрезка и треугольника и у отрезка есть свой AABB). Причем по факту нужна проверка на пересечение и "попадание в" двух фигур, возможно тут можно что-то попробовать хитрее.

krabanek 02.05.2012 13:40

Отрезок - это две точки, не? Плюс пересечение отрезка с фигурой найти легко, а если фигура не пересекается ни с одной из сторон и полностью лежит в зоне освещения?

-De- 02.05.2012 14:06

Отрезок это не две точки, в смысле, обе эти точки могут лежать вне фигуры, но пересечение будет. Нужно проверять именно ситуацию "пересечение или попадание внутрь".

ramshteks 02.05.2012 14:20

можно предложить как самое простое и наверно, это будет быстрее чем резать на треугольники. Режьте на относительно маленькие прямоугольники. Экспериментально можно выяснить при каком размере прямоугольников артефакты будут приемлемыми.

-De- 02.05.2012 14:32

Да, кстати, отрисовка в Graphics (а лучше наверное битмапдату, к ней много сравнительно быстрых функций прилагается) - не обязательно плохое решение. Потому как вся та математика про которую я пишу - она оч. дурная по многим параметрам.

krabanek 02.05.2012 15:41

Попробовал все-таки графические просчеты, решил не насиловать мозги себе и вам. Остался недоволен тем, что использовал-таки такой способ, но зато теперь все нормально. Тему можно закрыть, но если некоторым все-таки захочется попарится по поводу "пересечения или попадания внутрь" - велкам. :)


Часовой пояс GMT +4, время: 04:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.