Доброго дня, с сегодняшнего дня мы начнем делать 3D игру. Я постараюсь объяснить вам как делаются шейдеры, цикл игры, как загружать 3D модель и т.д.
Что нам необходимо...
Но давайте начнем с самого простого, посмотрите на эту заготовку для будущей игры.
Code
public class Main {
// конструктор главного класса Main.
public Main() {
// TODO Auto-generated constructor stub
}
// заготовка для настройки дисплея.
public void GET_INIT_DISPLAY() {
}
// заготовка для настройки 3D OpenGL.
public void GET_INIT_GL3D() {
}
// про это я расскажу позже
public void GET_INIT_UPDATE() {
}
// ну а здесь будет главный цикл игры.
public void GET_INIT_RUNNING() {
}
// здесь и так все понятно.
public static void main(String[] args) {
Main main = new Main();
main.GET_INIT_DISPLAY();
}
}
В методе GET_INIT_DiSPLAY(){} мы создадим самое же окно(window) в котором и будет все происходить.
Как написано в коде, метод GET_INIT_GL3D(){} служит для настройки 3D графики(какой материал будет иметь модель, игра будет 3D или 2D, и т.д).
Ну, а в методе GET_INIT_RUNNING(){} будет работать все происходящее.
Пока вы здесь читали, я уже модернизировал код выше и вот что у меня вышло
Code
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
public class Main {
public static boolean[] keys = new boolean[256];
public static final int DISPLAY_WIDTH = 800;
public static final int DISPLAY_HEIGHT = 600;
public String TITLE = "GL3Dgame";
public boolean VSYNC_ENABLED = false;
public boolean RUNNING = true;
// конструктор главного класса Main.
public Main() {
// TODO Auto-generated constructor stub
}
// заготовка для настройки дисплея.
public void GET_INIT_DISPLAY() {
try {
// настраиваем размеры окна, в моем случае это 800x600
Display.setDisplayMode(new DisplayMode(DISPLAY_WIDTH,
DISPLAY_HEIGHT));
// меняем заголовок окна
Display.setTitle(TITLE);
// вертикальная синхронизация в этот момент отключена
Display.setVSyncEnabled(VSYNC_ENABLED);
// создаем окно
Display.create();
// если появилась ошибка...
} catch (LWJGLException e) {
// выводим в консоль сообщение об ошибке
System.err.println("Error: Display.create");
// здесь объяснять не буду.
e.printStackTrace();
// asCrash == true это число 1, сообщаем всем, что причина очистки
// из за ошибки
cleanUp(true);
}
// это настройка Opengl
GET_INIT_GL3D();
// запускаем цикл
GET_INIT_RUNNING();
}
// заготовка для настройки 3D OpenGL.
public void GET_INIT_GL3D() {
}
// обновление содержимого
public void GET_INIT_UPDATE() {
mapKeys();
}
// ну а здесь будет главный цикл игры.
public void GET_INIT_RUNNING() {
// цикл будет работать до тех пор, пока RUNNING не будет равен false;
// окно не будет закрыто; пользователь не нажмет клавишу ESC.
while (RUNNING && !Display.isCloseRequested()
&& !keys[Keyboard.KEY_ESCAPE]) {
GET_INIT_UPDATE();
Display.update();
}
// asCrash == false это число 0. Выход в нормальном состоянии
cleanUp(false);
}
// массив для хранения Keyboard
public void mapKeys() {
for (int i = 0; i < keys.length; i++) {
keys[i] = Keyboard.isKeyDown(i);
}
}
// очистка и разрушение окна
public void cleanUp(boolean asCrash) {
Display.destroy();
System.exit(asCrash ? 1 : 0);
}
// здесь и так все понятно.
public static void main(String[] args) {
Main main = new Main();
main.GET_INIT_DISPLAY();
}
}
Когда вы запустите программу, вы увидите на мониторе окно размером 800x600 пикселей.
На этом все, по-позже я вам расскажу, как настроить наконец-то же GL3D. И какие преимущества этот метод нам даст.