Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Статьи
        Переводы с других сайтов
            LWJGL Вики
                LWJGL 3 Руководство

LWJGL 3 Руководство

Опубликованно: 15.09.2017, 21:53
Последняя редакция, Andry: 12.11.2018 12:09

Это перевод вот этой статьи оригинал.

Это руководство поможет вам начать работу с LWJGL.

С чего начать

Пожалуйста, используйте конфигуратор сборки на нашей странице загрузки, чтобы настроить и загрузить версию LWJGL. Вам также понадобится Java SE Development Kit (JDK), для LWJGL требуется версия 8 или выше. Затем перейдите к настройке проекта в вашей любимой среде IDE и настройте его, как описано в Руководстве по установке.

Теперь вы должны быть готовы разработать и запустить приложение LWJGL. Ниже приведен простой пример, который использует GLFW для создания окна и очищает цвета фона до красного, используя OpenGL.

import org.lwjgl.*;
import org.lwjgl.glfw.*;
import org.lwjgl.opengl.*;
import org.lwjgl.system.*;

import java.nio.*;

import static org.lwjgl.glfw.Callbacks.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryStack.*;
import static org.lwjgl.system.MemoryUtil.*;

public class HelloWorld {

	// обработка окна
	private long window;

	public void run() {
		System.out.println("Hello LWJGL " + Version.getVersion() + "!");

		init();
		loop();

		// Открыть окно обратным вызовом и уничтожить окно
		glfwFreeCallbacks(window);
		glfwDestroyWindow(window);

		// Завершить GLFW и высвободить ошибку обратного вызова
		glfwTerminate();
		glfwSetErrorCallback(null).free();
	}

	private void init() {
		// Настройка ошибок обратного вызова. Реализация по умолчанию
		// сообщение об ошибке в System.err.
		GLFWErrorCallback.createPrint(System.err).set();

		// Инициализировать GLFW. Большинство функций GLFW не будут работать, до того как это будет сделано.
		if ( !glfwInit() )
			throw new IllegalStateException("Unable to initialize GLFW");

		// Конфигурируем GLFW
		glfwDefaultWindowHints(); // необязательно, текущие подсказки окна уже по умолчанию
		glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // окно останется скрытым после создания
		glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // размеру окна будет изменяемым

		// Создать окно
		window = glfwCreateWindow(300, 300, "Hello World!", NULL, NULL);
		if ( window == NULL )
			throw new RuntimeException("Failed to create the GLFW window");

		// Настроить клавишу обратного вызова. Он будет вызываться каждый раз, когда клавиша нажимается повторно или отпускается.
		glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> {
			if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE )
				glfwSetWindowShouldClose(window, true); // Мы обнаружим это в цикле рендеринга
		});

		// Получить стек потока и передать новый кадр
		try ( MemoryStack stack = stackPush() ) {
			IntBuffer pWidth = stack.mallocInt(1); // int*
			IntBuffer pHeight = stack.mallocInt(1); // int*

			// Получить размер окна, переданного glfwCreateWindow
			glfwGetWindowSize(window, pWidth, pHeight);

			// Получить разрешение основного монитора
			GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());

			// Центрировать окно
			glfwSetWindowPos(
				window,
				(vidmode.width() - pWidth.get(0)) / 2,
				(vidmode.height() - pHeight.get(0)) / 2
			);
		} // кадр стека автоматически открывается

		// Сделать контекст OpenGL текущим
		glfwMakeContextCurrent(window);
		// Включить v-sync
		glfwSwapInterval(1);

		// Сделать окно видимым
		glfwShowWindow(window);
	}

	private void loop() {
		// Эта строка имеет решающее значение для взаимодействия LWJGL с
		// контекстом OpenGL GLFW или с любым контекстом, который управляется извне.
		// LWJGL обнаруживает текущий контекст, в текущем потоке,
		// создает экземпляр GLCapabilities и делает привязки OpenGL
		// доступными для использования.
		GL.createCapabilities();

		// Установите прозрачный цвет
		glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

		// Запустите цикл рендеринга, до тех пор пока пользователь не попытается закрыть
		// окно или нажал клавишу ESCAPE.
		while ( !glfwWindowShouldClose(window) ) {
			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // очистить framebuffer

			glfwSwapBuffers(window); // поменять цвет буферов

			// Опрос событий окна. Клавиша обратного вызова выше, будет вызываться
			// только во время этого вызова.
			glfwPollEvents();
		}
	}

	public static void main(String[] args) {
		new HelloWorld().run();
	}

}

LWJGL поставляется с богатой документацией, вы можете просматривать javadoc онлайн, начав отсюда. Для большего количества информации, FAQ, смотрите руководство и уроки посещая вики(ru), wiki(en). Страницы FAQ Память, FAQ Привязки и Устранение неполадок особенно полезны. Дополнительные примеры кода см. в LWJGL примеры и репозитории lwjgl3-demos (требуется ночная сборка). Для переноса существующего кода LWJGL 2 на LWJGL 3 смотрите руководство по миграции.

Сборка из исходников

Клонируйте Git репозиторий к себе, установить JDK и Apache Ant, затем вы должны быть готовы собрать. Используйте следующие цели:

    ant – Собирать все и выполнить тесты
    ant compile-templates – Компилировать шаблон генератора привязки(binding)
    ant compile – Компилировать Java код (включая генерируемый)
    ant compile-native – Компилировать и связывать нативную библиотеку
    ant tests – Запустить набор тестов
    ant demo -Dclass=‹demo class› – Запустить одну из демок LWJGL в тестовом модуле
    ant clean – Удаляет все файлы и папки сгенерированные скриптом сборки.
    and -f update_dependencies.xml – Принудительно снова загружать все зависимости.

Обратите внимание, что цель нативная архитектура определяется os.arch из JVM, которая запускает Ant. Для кросс-компиляции используйте переменную среды LWJGL_BUILD_ARCH для ее переопределения (задавайте x86 или x64).

Бинарные зависимости загружаются из стабильной ветки(branch) загрузки. Используйте переменную среды LWJGL_BUILD_TYPE, чтобы переопределить это:

nightly – последняя успешная сборка, возможно нерабочая. Репозитории зависимостей можно найти здесь
stable – по умолчанию, последняя сборка, которая была проверена на работоспособность с LWJGL,
release/latest – последняя стабильная сборка, которая была повышена до официального LWJGL $
release/{build.version} – ранее выпущенная сборка

Если вы используете пользовательские бинарники или просто работаете в offline режиме, задайте для переменной среды LWJGL_BUILD_OFFLINE одно из значений true/on/yes.

Процесс сборки LWJGL создает тысячи крошечных файлов. Если вы хотите перенаправить вывод в другую папку или устройство хранения, вы можете сделать это задав переменную среды LWJGL_BUILD_OUTPUT.

LWJGL для меня?

LWJGL простой, но мощный. Он не для всех.

Если вы пользовались OpenGL, вы будете чувствовать себя как дома.

Если вы только начинаете, то сначала ознакомьтесь с каждым API.

GLFW

GLFW — это библиотека с открытым исходным кодом, межплатформенная библиотека для создания окон с контекстами OpenGL и имеющая ввод и события. Его легко интегрировать в существующие приложения и нет необходимости размещать в основном цикле.

GLFW является предпочтительной системой окон для приложений LWJGL 3. Если вы знакомы с LWJGL 2, GLFW является заменой класса Display и всего в пакете ввода.

Изучить GLFW легко. Он имеет простой, но мощный API и полную документацию.

OpenGL

OpenGL — это лучшая среда для разработки портативных интерактивных 2D и 3D-графических приложений.

OpenGL — это массивный API с длинной историей и сотнями расширений. Изучение этого с нуля — это нелегкое занятие, но вы можете начать с его документации. OpenGL регистр также весьма полезен.

OpenCL

OpenCL — это первый открытый, беспроигрышный стандарт для кросс-платформенного параллельного программирования современных процессоров, которые находится на персональных компьютерах, серверах и карманных/встроенных устройствах. OpenCL (Открытый Язык Вычислений) значительно повышает скорость и отзывчивость для широкого спектра приложений во многих рыночных категориях: от игр и развлечений до научных и медицинских программ.

Спецификации OpenCL и его расширения можно найти в реестре Khronos OpenCL.

OpenAL

OpenAL (для «Открытых Аудио Библиотек») — это программный интерфейс для аудиооборудования. Интерфейс состоит из ряда функций, которые позволяют программисту указывать объекты и операции при производстве высококачественного аудио вывода, в частности многоканальный вывода от источников в 3D пространстве звука окружающего слушателя.

LWJGL поставляется вместе с OpenAL Soft, лицензированный по лицензии LGPL, кросс-платформенной программной реализацией аудио API-интерфейса OpenAL 3D.

Смотрите так же:


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.