Подключение LWJGL в IntelliJ IDEA
Опубликовано: 01.09.2018
Среда программирования:
Lightweight Java Game Library (LWJGL) — открытая графическая библиотека, основной целью которой является предоставление простого и легковесного программного интерфейса для создателей компьютерных игр на языке Java.Она предоставляет доступ к OpenGL, OpenAL, OpenCL. Этот доступ является прямым и высокопроизводительным, но также включает в себя безопасный и удобный для пользователя уровень. Чтобы начать работать с LWJGL нужно скачать архив с сайта: https://www.lwjgl.org/ В разделе Download нужно нажать Customize LWJGL и выбрать Release или Stable . Их отличие в том, что Stable это последняя версия, которая была проверена для работы с LWJGL, а Release последняя стабильная сборка, которая была повышена до официального LWJGL.
Геймдев на Java 001 - Создаем проект и подключаем LWJGL
Затем в разделе Contents убираем галочки везде кроме GLFW и OpenGL . Жмем DOWNLOAD ZIP и скачиваем архив. После того как все скачалось, извлекаем из него в папку все файлы с разрешением jar. Далее запускаем IntelliJ IDEA и создаем проект или открываем готовый. Заходим в меню File , выбираем Project Structure , в открывшемся окне переходим в Modules и нажимаем на зеленый плюс справа. Далее выбираем JARs os directories и затем добавляем все файлы с разрешением jar из папки, в которую их извлекли. Отмечаем все что добавили галочками и нажимаем Apply и затем OK . Все,LWJGL подключен. Если нажать на External Libraries , то можно увидеть все что мы подключили. Напишем пример, который использует GLFW для создания окна и очистки цвета фона до желтого, используя OpenGL.
Код:
HelloWorld: import org.lwjgl.Version ; import org.lwjgl.glfw.GLFWErrorCallback ; import org.lwjgl.glfw.GLFWVidMode ; import org.lwjgl.opengl.GL ; import org.lwjgl.system.MemoryStack ; import java.nio.IntBuffer ; import static org. lwjgl .glfw .Callbacks .glfwFreeCallbacks ; import static org. lwjgl .glfw .GLFW .*; import static org. lwjgl .glfw .GLFW .glfwPollEvents ; import static org. lwjgl .opengl .GL11 .*; import static org. lwjgl .system .MemoryStack .stackPush ; import static org. lwjgl .system .MemoryUtil .NULL ; public class HelloWorld { // The window handle private long window ; public void run ( ) { System . out .println ( "Hello LWJGL " + Version. getVersion ( ) + "!" ) ; init ( ) ; loop ( ) ; // Free the window callbacks and destroy the window glfwFreeCallbacks (window ) ; glfwDestroyWindow (window ) ; // Terminate GLFW and free the error callback glfwTerminate ( ) ; glfwSetErrorCallback ( null ) .free ( ) ; } private void init ( ) { // Setup an error callback. The default implementation // will print the error message in System.err. GLFWErrorCallback. createPrint ( System . err ) .set ( ) ; // Initialize GLFW. Most GLFW functions will not work before doing this. if ( ! glfwInit ( ) ) throw new IllegalStateException ( "Unable to initialize GLFW" ) ; // Configure GLFW glfwDefaultWindowHints ( ) ; // optional, the current window hints are already the default glfwWindowHint (GLFW_VISIBLE, GLFW_FALSE ) ; // the window will stay hidden after creation glfwWindowHint (GLFW_RESIZABLE, GLFW_TRUE ) ; // the window will be resizable // Create the window window = glfwCreateWindow ( 300 , 300 , "Hello World!" , NULL , NULL ) ; if ( window == NULL ) throw new RuntimeException ( "Failed to create the GLFW window" ) ; // Setup a key callback. It will be called every time a key is pressed, repeated or released. glfwSetKeyCallback (window, ( window, key, scancode, action, mods ) -> { if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE ) glfwSetWindowShouldClose (window, true ) ; // We will detect this in the rendering loop } ) ; // Get the thread stack and push a new frame try ( MemoryStack stack = stackPush ( ) ) { IntBuffer pWidth = stack. mallocInt ( 1 ) ; // int* IntBuffer pHeight = stack. mallocInt ( 1 ) ; // int* // Get the window size passed to glfwCreateWindow glfwGetWindowSize (window, pWidth, pHeight ) ; // Get the resolution of the primary monitor GLFWVidMode vidmode = glfwGetVideoMode (glfwGetPrimaryMonitor ( ) ) ; // Center the window glfwSetWindowPos ( window, ( vidmode. width ( ) - pWidth. get ( 0 ) ) / 2 , ( vidmode. height ( ) - pHeight. get ( 0 ) ) / 2 ) ; } // the stack frame is popped automatically // Make the OpenGL context current glfwMakeContextCurrent (window ) ; // Enable v-sync glfwSwapInterval ( 1 ) ; // Make the window visible glfwShowWindow (window ) ; } private void loop ( ) { // This line is critical for LWJGL's interoperation with GLFW's // OpenGL context, or any context that is managed externally. // LWJGL detects the context that is current in the current thread, // creates the GLCapabilities instance and makes the OpenGL // bindings available for use. GL. createCapabilities ( ) ; // Set the clear color glClearColor (1.0f, 1.0f, 0.0f, 0.0f ) ; // Run the rendering loop until the user has attempted to close // the window or has pressed the ESCAPE key. while ( ! glfwWindowShouldClose (window ) ) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; // clear the framebuffer glfwSwapBuffers (window ) ; // swap the color buffers // Poll for window events. The key callback above will only be // invoked during this call. glfwPollEvents ( ) ; } } public static void main ( String [ ] args ) { new HelloWorld ( ). run ( ) ; } }Lwjglpj.zip | 9.57 кб |