Народ, на сколько я понял DX9 прокси уже есть и вы выкачиваете данные о мире. Подкиньте пожалуйста, либо маленький кусочек-пример (250мб не имею возможности качать). Лучше конечно прогу с исходниками, чтобы если что можно было доработать напильником.
Что делать с 'сырыми' данными - идеи есть. Игроки в основном по земле ходют, значит информация нам нужна только о тонком слое над землей, высотой в игрока. Думаю на драконов можно и забить
пусть летают куда хотят. Выкинуть дупы реально, идея загнать данные в sql-сервер неплохая, хотя есть и специализированные пакеты....
Или вариант - все 'по чему ходят' делаем подробно, определяется углом наклона. Вертикальные препятствия - 'одеваем' в выпуклые многоугольники, если они 'плохо контачат' с другими. Отдельно разбираем пещеры и внутренности зданий, определяются ну например невозможностью попасть сверху. Напомните мне, есть ли в игре 'окна в стенах' и сильно ли потеряем если будет нельзя через них стрелять...
Алгоритмы использования геодаты в игре должен выполнять следующие задачи:
1. Можно ли находиться в указанных координатах.
2. Можно ли двигаться от одной координаты к другой.
3. Можно ли стрелять от одной координаты к другой.
И особняком:
4. Поиск пути от одной координаты к другой.
И самое главное решение эти алгоритмы должны выдавать максимально быстро, трудоемкости желательно константа
Естественно для работы этих алгоритмов не требуется полная трехмерная картина, нужна некая 'компиляция' он него.
- Для решения задач 2 и 3 алгоритм одинаковый, но данные разные (ходить нельзя стрелять можно), данные лучше хранить в виде серии плоских проекций (вид с верху) границ препятствий, в виде набора трехугольников или, если не лень, выпуклых/любых многоугольников. Обязательный двумерный хеш - клетчатая сетка. Сначала определяем какие ячейки сетки пересекает прямая движения, а затем для каждой ищем пересекаемый трехугольник, если находим хоть один - прекращаем поиск и ответ отрицательный. Для пустых клеток положительный ответ можно дать еще на проверке хеша (нули там поставить вместо ссылки на список трехугольников). При переходе с плоскости на плоскость (поднимаемся по спирали, как в ТоИ например) можно поставить на гранях трехугольников ссылку на плоскость, в которой лежат трехугольники-продолжение.
- Для задачи 1 можно воспользоваться данными из 2, ищем клетку хеша, ищем трехугольник, в который попала точка (нашли - ответ отрицательный).
- Задача 4 - алгоритмов тьма, конечно можно воспользоваться данными из 2, но лучше дополнить их готовыми путями обхода препятствий например по часовой стрелке (для каждой плоскости список полигонов-обходов и у каждого трехугольника ссылка на соответствующий полигон), с вогнутостями в зависимости от выбора алгоритма - либо срезаем по прямой, либо обходим по контору.
И самое главное, не забывайте, что существуют кластерные технологии, задачи, с которой сложно справиться одной машине, можно поручить нескольким (или процессорам, учтите жава - однотредовая). Работа с геодатой - очень хорошо распаралеливается.
И напомните мне, в ява есть возможность работы с mapped-файлами - это очень удобно, двойная экономия памяти и ощутимое ускорение.
P.S. Ненавижу умные проги
. Какой умник сделал на этом форуме в сообщениях перенос на следующую строку зависимым от установки знаков препинания? Не поставишь точку - не перенесет, поставишь ':' объеденяет все в одну,... Не фатально но удивительно. Для того чтобы заставить этот форум писать предложения каждое с новой строчки пришлось поизвращаться. А как делать ненумерованный список? Куда деваются мои '*'? Запомните, пользователи не должны 'сражаться с программой' за то, чтобы она делала то что необходимо.