Любой объект в играх, подобных Minecraft, состоит из набора блоков, или кубов. В этом уроке мы научимся отображать куб на экране и добавим ему функционал перемещения и вращения.
Отображение плоского квадрата
Начнём с функции loop, отвечающей за отображение объектов на экране. Сначала установим черный задний фон, задав нулевые значения для RGB:
// Установка черного фона (RGB = 0, 0, 0)
В цикле while будем описывать выводимые объекты. Для начала создадим плоский квадрат:
// Открытие матрицы
// Указание координат объекта
// Указание формы (квадрат)
// Установка цвета (например, красный: RGB = 1, 0, 0)
// Указание вершин квадрата (координаты четырех вершин)
// Закрытие матрицы
// Добавление на экран
Запустив программу, увидим красный плоский квадрат.
Добавление перемещения и создание 3D объекта
Увеличим размер окна до 800×600 пикселей и изменим его заголовок на «3D Game». Создадим поля positionX и positionY со значениями 0.0 для управления положением квадрата. Подставим эти поля в качестве координат объекта:
// ... вместо 0, 0 подставляем positionX, positionY ...
В функции init добавим обработку нажатия клавиш. Используем оператор switch для обработки действий (Action) — нажатия и удержания клавиш:
// Обработка Action (нажатие/удержание клавиш)
switch (action) {
case KeyUp:
positionY += 0.05f;
break;
case KeyDown:
positionY -= 0.05f;
break;
case KeyLeft:
positionX -= 0.05f;
break;
case KeyRight:
positionX += 0.05f;
break;
}
Теперь квадрат будет перемещаться по нажатию стрелок. Для корректного отображения 3D объектов, в функции loop добавим код для установки глубины и проекции:
// Установка глубины
// Создание проекции (800x600, соответствует размеру окна)
Удалим код, создающий 2D квадрат, и заменим его кодом для отрисовки 3D куба. Ключевое отличие – добавление координаты Z для каждой вершины:
// Подгрузка проекции
// Установка координат (X, Y, Z)
// Установка размеров
// Описание объекта (с координатами Z для каждой вершины)
Сначала определим две грани куба (например, правую и левую). При запуске кода будет отображаться квадрат, задняя сторона которого видна при перемещении, демонстрируя глубину. Добавим код для остальных граней:
// ... код для верхней, нижней, задней и боковых граней ...
Добавление движения и вращения
Добавим поля positionZ (начальное значение -5) и angle (начальное значение 0) для контроля глубины и угла вращения. Расширим обработку клавиш, добавив обработку клавиш ‘W’ и ‘S’ для изменения positionZ:
// ... обработка клавиш W и S для изменения positionZ ...
Для вращения используем функцию glRotatef, задавая угол вращения (angle) и ось вращения (Y):
glRotatef(angle, 0, 1, 0); // Вращение вокруг оси Y
В конце функции loop будем увеличивать angle на 0.5 для непрерывного вращения:
angle += 0.5f;
Теперь мы можем перемещать куб во всех трёх измерениях и вращать его.
Мы успешно создали вращающийся 3D куб с возможностью перемещения во всех направлениях, используя Java. Этот куб станет основой для дальнейшего развития нашей 3D игры.