Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > E-mail

Оценить эту запись

Физика на растровых картах

Запись от E-mail размещена 10.05.2010 в 23:12

Не так давно на форуме проскакивала тема про оптимизацию системы определения столкновений объектов, имеющие неправильную геометрическую форму и хранящиеся в виде растровых файлов.

Этот топик подал мне идею: а что если к каждой растровой карте, представляющей собой некий бесформенный объект, заранее просчитать "карту" углов и расстояний до ближайшей поверхности, а на самой поверхности хранить угол её нормали. Соответственно, позже можно просто получить информацию о пикселе или группе пикселей. В случае, если какие-либо области исходной растровой карты будут видоизменяться, то аналогично обновлять область "карты" углов и расстояний.

Черновой вариант такого обработчика карт был сделан достаточно быстро, в качестве хранилища результата сначала был использован класс BitmapData, который позже был заменён на ByteArray. Алгоритм незамысловат и не оптимизирован, прозрачность каждого пикселя сверяется с пороговым значением, чтобы определить материален он или нет. Далее по окружности с постепенно увеличивающимся радиусом ищется пиксель с противоположным значением (т.е. если центральный материален, то ищется ближайший не материальный). Когда такой пиксель находится, то радиус полученной окружности считается расстоянием для него, а угол расчитывается. Если такой пиксель был найден сразу же рядом, то центральный пиксель считается частью поверхности с расстоянием 0 и для него считается угол нормали. Само собой, даже при расчёте небольших карт время "рендера" было довольно велико, поэтому для увеличения производительности для расчёта каждого пикселя используются уже готовые данные соседнего. Правда расчёт в итоге всё равно долгий, пример на моём амд64 3700+ 2.2 ГГц считается 6.5 секунд.

Я не знаю насколько хорошо данный метод будет работать при проверке столкновений множества подвижных объектов, но для проверки столкновения и даже его обработки множества подвижных с одним неподвижным, как мне кажется, этот метод сгодится.

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

Флэшку я залил себе на юкоз для тех, кому лень качать отсюда и распаковывать. Там просто ждём пока будет 100% и водим по картинке мышкой.
Вложения
Тип файла: rar angleCalculator.rar (185.5 Кб, 183 просмотров)
Всего комментариев 3

Комментарии

Старый 11.05.2010 10:26 Котяра вне форума
Котяра
 
Аватар для Котяра
Надо попробовать бендером карту нормалей посчитать - и карты нормалей составлять не в рантайме, а заранее.. кроме того можно наверное и аппроксимацию сделать, не нужна скорей всего такая точность..
Старый 11.05.2010 10:38 E-mail вне форума
E-mail
 
Аватар для E-mail
Заранее, само собой
Старый 20.05.2010 13:54 TERRORist вне форума
TERRORist
 
Аватар для TERRORist
Если уж заранее просчитывать, лучше сразу векторизацию -> триангуляцию устроить, тогда можно будет к какому нить существующему движку подключить.
 
Последние записи от E-mail

 


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


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