Re[2]: Как рендерят огромные карты?
От: Stanislav V. Zudin Россия  
Дата: 02.07.20 07:32
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>>Как рендерят большие карты?


Дополню ответ камрада swame, расскажу, как рендерится дизайн печатной платы (или кристалл ИС).

S>В памяти набор примитивов (линия, точка, текст)+ нужные графические атрибуты.

S>Примитивы отсортированы по координатам, чтобы быстро отсортировывать те,что находятся в текущей области отрисовки.

Строится 2Д хеш, точнее несколько хешей под разные объекты. Хеш позволяет быстро найти объекты, попадающие в заданный прямоугольник, либо в окрестности точки (мы же потом захотим нарисованное потыкать мышой).

S>Если карта занимает 1,Гб в SVG то ее легко поместить в несколько сотен метров оперативки.

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

Более того, не создавать объекты для каждой сущности, а хранить всё в плоском массиве и оперировать коллекцией объектов и идентификаторами объектов (целочисленными индексами). Можно сварганить итератор для удобства доступа к атрибутам объекта.

Для пущей компактности каждый атрибут объекта хранится в своём массиве. Другими словами переходим к реляционной таблице, где в массивах лежат столбцы таблиц.

S>Отрисовывать в графическом движке с аппаратным ускорением, если нужна быстрая отрисовка с антиалиасингом.


+1
С использованием соответствующих техник для ускорения рисования (списки вершин, шейдеры и т.д.).

S>Файл 1,5 Гб можно грузить и парсить за десятки секунд, в зависимости от скорости диска.


Если не использовать какой-нибудь msxml парсер, а взять, к примеру, scanner нашего камрада c-smile'а, то скорость разбора xml будет ограничена скоростью чтения с диска. Хотя... любой sax-парсер должен дать близкие значения по скорости, структуры данных нужно выбрать правильные.

S>Но если нужно грузить быстро и часто, лучше переложить в что то более компактное, чем XML, и легко парсящееся.


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

S>Самое трудоемкое реализовать качественную отрисовку картинки.


Угу.
Дизайнерские способности не помешают, чтобы красиво получилось.
_____________________
С уважением,
Stanislav V. Zudin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.