Как оптимизировать мой пользовательский формат карты (Java) - PullRequest
3 голосов
/ 29 января 2012

Я создаю 3D-игру, в которой у меня большой открытый мир (200 × 200 километров), в котором используется карта высот. Я делю карту высот на 200 × 200 = 40000 областей 1000 × 1000 метров, и они снова делятся на 20 × 20 = 400 фрагментов 50 × 50 метров. Карта высот генерируется из файла PNG.

Я думаю о способах хранения местности. Я что-то пробовал, но он генерирует файлы размером около 16 МБ на регион, что составляет 640 ГБ для всего мира (40 000 регионов).

Пример файла региона можно найти здесь: http://updo.nl/file/e10ce974.umap

Мой вопрос: как можно компактно хранить столько информации в файлах регионов и читать их позже?

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Карты высот являются эффективным методом хранения информации, если значения обычно различаются по каждой координате, а способ различения не предсказуем. Другими словами, карты высот эффективны, когда вы работаете со случайными данными. Если в ваших данных есть шаблон, обычно есть лучшее решение.

Рассмотрим строку, описанную y = x. Вы можете описать этот уклон с помощью карты высот с разрешением 1, которая будет выглядеть примерно так: [(1, 1), (2, 2), (3, 3), ...]. Если ваша карта высот имеет высокое разрешение, этот список будет очень большим. В качестве альтернативы вы можете описать этот наклон как линию, проходящую через точки (1, 1) и (2, 2) . В этом случае гораздо эффективнее определить линию / объем через определенные точки / вершины.

Для данных, подобных местности, поскольку они обычно неслучайны, я бы рекомендовал второй подход через полигональные сетки . Вы можете найти такую ​​библиотеку, как JMesh .

Для дальнейшего чтения, здесь - отличный ответ (откровенно говоря, лучше моего) на обмене стеками разработки игр, относящимися к этой теме.

0 голосов
/ 29 января 2012
...