Пусть наша карта представлена в двумерном пространстве, и она состоит из прямоугольных граней, которые имеют свои координаты и текстуру.
C++ Source Code:
1
структура Face:
2
Point2D _posXY;
3
// или Rect, у которого top, left, right, bottom
4
// сразу будет иметь значения позиции в нашей системе координат
5
Texture _texture;
Вот, такими гранями мы заполнили карту. И имеется у нас камера, которая, также, имеет свою позицию, ширину и высоту. Весь обзор камеры отображается на нашем экране.
"Сломался" я на представлении того, как определять пересекает ли грань область обзора камеры или нет. Точнее, алгоритм пересечения прямоугольников я могу представить. Но, наверно, не есть хорошо сравнивать на пересечение все прямоугольники карты с прямоугольником обзора. И, вот, затрудняюсь придумать более лаконичный способ отсечения карты.
Я понимаю, что это не совсем простая задача, и стоило бы поискать в интернете какую-нибудь теорию, но затрудняюсь в самом поиске (а что искать вообще?). Буквально, поверхностно прочитал статью о двоичном разбиении пространства (BSP), но пока что не стал более детально в это вникать, т.к. ещё не понял, а пригодится ли мне это для решения данной задачи.
Для чего мне всё это. Ведь можно было бы всю карту подразделить на фиксированные тайлы определённых размеров и, к примеру, символами рисовать мозаику. Тогда в таком случае затруднительно будет рисовать элементы, которые превышают размеры одного тайла. (по крайней мере, мне так кажется).
Для примера отметил на скрине две области. Пусть для отрисовки нижней области рисуется мозаикой одно и то же изображение, а для отрисовки области выше растягивается другое изображение и выводится один раз.
И, как мне кажется, структура граней описанная выше может более лучше способствовать отрисовке карты.
Вот подробно рассказал в чём у меня проблема. Есть что сказать или посоветовать? Я ещё не смог себя убедить в том, что мне это не по силам.