Java 3D: Создаем и вращаем куб в игре

Любой объект в играх, подобных 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 игры.

Что будем искать? Например,программа