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

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

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

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

Это руководство поможет вам начать работу с 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 онлайн, начиная здесь. Дополнительные сведения см. В разделе «Вопросы и ответы», руководства и учебные пособия. Часто задаваемые вопросы о часто задаваемых частотах, часто задаваемых вопросах и страницах поиска неисправностей. Дополнительные примеры кода см. в наборе тестов LWJGL и репозитории lwjgl3-demos (требуется ночная сборка). Для переноса существующего кода LWJGL 2 на LWJGL 3 см. Руководство по миграции.

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

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

    ant – Собирает все и выполняет тесты
    ant compile-templates – Compiles the binding generator templates
    ant compile – Compiles the Java code (including generated)
    ant compile-native – Compiles and links the native library
    ant tests – Runs the test suite
    ant demo -Dclass= – Runs one of the LWJGL demos in the test module
    ant clean – Deletes all files and folders generated by the build script.
    and -f update_dependencies.xml – Forces all dependencies to be downloaded again.

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

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

nightly – the latest successful build, possibly broken. Dependency repositories can be found here
stable – the latest build that has been verified to work with LWJGL, the default
release/latest – the latest stable build that has been promoted to an official LWJGL $
release/{build.version} – a specific previously released build

Если вы используете пользовательские двоичные файлы или просто работаете в автономном режиме, установите для переменной среды 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 (Open Computing Language) значительно повышает скорость и отзывчивость для широкого спектра приложений во многих рыночных категориях: от игр и развлечений до научных и медицинских программ.

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

OpenAL

OpenAL (для «Open Audio Library») — это программный интерфейс для аудиооборудования. Интерфейс состоит из ряда функций, которые позволяют программисту определять объекты и операции при производстве высококачественного аудиовыхода, в частности многоканальный выход трехмерных устройств источников звука вокруг слушателя.

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


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

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

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