Android aктивити с изометрической сеткой на Kotlin и OpenGL ES
Необходимо разработать активити с выводом OpenGL ES контекста и отрисовки в нём изометрической сетки по требованиям ниже.
Сроки: 1-2 недели. Продление сроков по согласованию и при наличии веских доводов.
Отслеживание прогресса: коммиты промежуточных состояний кода и/или предоставление сборок для запуска и тестирования каждые 2-3 дня или чаше по согласованию.
Коммуникация: краткое обсуждение и основные договорённости до начала работ - на площадке, далее - по договорённости.
Спецификация окружения
- Android 7.0
- Kotlin 2.0.0.
- OpenGL ES 3.2.
Требования
Макет активности
Активность "Designer" должна состоять из трех верхнеуровневых UI элементов:Заголовок (Header)
Подвал (Footer)
Холст (Canvas)
Заголовок (Header)
Элемент заголовка должен быть размещен в верхней части активности и иметь высоту 50 пикселей.
Элемент заголовка должен служить контейнером для других UI элементов.
Фон элемента заголовка должен быть цвета #383838.
Подвал (Footer)
Элемент подвала должен быть размещен в нижней части активности и иметь высоту 50 пикселей.
Элемент подвала должен служить контейнером для других UI элементов.
Фон элемента подвала должен быть цвета #383838.
Холст (Canvas)
Элемент холста должен быть размещен в центре активности и заполнять все пространство между заголовком и подвалом.
Элемент холста должен служить контейнером для контекста рисования (OpenGL контекст) и других UI элементов (например, кнопок), расположенных поверх этого контекста.
Элемент холста должен состоять из следующих верхнеуровневых UI элементов:
- Контекст рисования
- Элементы управления масштабированием
Контекст рисования
Контекст рисования должен заполнять все пространство элемента холста.
Контекст рисования должен использоваться для рендеринга OpenGL контекста.
Контекст рисования и его проекция должны быть настроены в соответствии с правилами изометрической проекции и приводить к следующим результатам:Пространство просмотра (камера) должно быть повернуто вокруг центра координат и соответствовать следующим условиям:Положительное направление оси X должно указывать на нижний левый угол экрана;Положительное направление оси Y должно указывать на нижний правый угол экрана;Положительное направление оси Z должно указывать на верх экрана;Направление пространства просмотра (камеры) должно быть под углом примерно 35,264 градуса к плоскости осей X и Y.
Контекст рисования должен рисовать изометрическую сетку (или сетку).
Сетка должна быть изображена в виде набора линий, имитирующих оси X, Y и Z.
Линии сетки для оси X должны находиться в плоскости осей X и Y, быть проведены параллельно оси X, простираться от -100 до 100 вдоль оси X и быть проведены с интервалами 1 единица вдоль оси Y от -100 до 100.
Линии сетки для оси Y должны находиться в плоскости осей X и Y, быть проведены параллельно оси Y, простираться от -100 до 100 вдоль оси Y и быть проведены с интервалами 1 единица вдоль оси X от -100 до 100.
Линии сетки для оси Z должны находиться в плоскости осей X и Y, быть проведены параллельно линии, образованной точками с координатами [X, Y] [-100, -100] и [100, 100], что является диагональю квадрата, образованного точками с координатами [X, Y] [100, 100], [100, -100], [-100, -100] и [-100, 100], и должны быть проведены с интервалами 1 единица вдоль оси X (или Y), чтобы заполнить квадрат.
Фоновый цвет контекста рисования должен быть цвета #181818.
Линии сетки контекста рисования должны быть цвета #2c2c2c.
Элементы управления масштабированием
Элементы управления масштабированием должны быть размещены вертикально в правом верхнем углу элемента холста.
Элементы управления масштабированием должны быть реализованы в виде кнопок + и -.
Эти кнопки должны отображаться с фоновым цветом #383838, значением прозрачности 0.7 и цветом текста #FFFFFF.
Взаимодействие с холстом
Перемещение
Перемещение пространства просмотра должно быть реализовано с помощью касания (с удержанием) и перемещения.
Масштабирование
Масштабирование пространства просмотра должно быть реализовано с использованием элементов управления масштабированием.
Пространство просмотра должно масштабироваться на 1 единицу (или иное значение на основании предложений) OpenGL соответственно, в зависимости от направления масштабирования.
Центрирование
Центрирование пространства просмотра должно быть реализовано с использованием кнопки "Center", размещенной в элементе заголовка.
Эта кнопка должна отображаться с фоновым цветом #383838 и цветом текста #FFFFFF.
При нажатии на эту кнопку, пространство просмотра должно перемещаться к центру координат.
Включение и выключение отображения сетки
Переключение отображения сетки должно быть реализовано с использованием кнопки "Grid", размещенной в элементе заголовка.
Эта кнопка должна отображаться с фоновым цветом #383838 и цветом текста #FFFFFF.
Пример отрисовки изометрической сетки в файле isometric-grid-example.png.