Java 3DGame Creation LWJGL Lv1〜 Javaでゲームを作るLv1〜

イントロダクション

以前、結構前ですが、LWJGLに触れてみました。その時は「よくわからない」の一言で済ましてしまいました。

その時は、作るもののイメージのみだったのでLWJGLがどんなものか知るだけで十分だったからです。

そして、今に至りようやく中身を理解する必要が出てきましたのでちゃんと理解します。まずは写経です。

Introduction( use google translation)

I used to talk to LWJGL a while ago. At that time I did it with a word of "I do not know well".

At that time, it was enough to know what LWJGL is like because it was only an image of what to make.

And now that we need to understand properly. First let's "写経(shakyo)"!

写経するコード( The code to  "写経"shakyo)

https://github.com/SilverTiger/lwjgl3-tutorial/blob/master/src/silvertiger/tutorial/lwjgl/Introduction.java

https://www.lwjgl.org/guide

/**
* LWJGL初めの練習用クラスです。
* This Class is Hello LWJGL
*
* @see https://github.com/SilverTiger/lwjgl3-tutorial/blob/master/src/silvertiger/tutorial/lwjgl/Introduction.java
*
* @author takunoji
*/
public class LwjglPracLv1 {

/** ウィンドウハンドラ */
long window;

/**
* 初めに動くメソッドです。全てはここから始まる。。。<br/>
* Java program start from main method...<br/>
*
* @param args Array of String
*/
public static void main(String[] args) {
   LwjglPracLv1 lv1 = new LwjglPracLv1();
}

public void run() {
   System.out.println("Hello LWJGL " + Version.getVersion());
   // 初期処理
   init();
   // ゲームループ
   gameLoop();
}

/**
*  初期処理
*/
private void init() {
// エラー時のコールバックに標準エラー出力を設定する
GLFWErrorCallback.createPrint(System.err).set();
// GLFWの初期化
if (!glfwInit()) {
   throw new IllegalStateException("Unalbe to Initialize GLFW");
}
// GLFWの設定処理
glfwDefaultWindowHints();
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
window = glfwCreateWindow(300, 300, "Hello LWJGL", NULL, NULL);

if(window == NULL) {
   throw new RuntimeException("Failed to create GLFW Window");
}

// Setup a key callback. It will be called every time a key is pressed, repeated or released.
// ラムダ式を使用しているのでJDK1.8以上のコンパイラレベルを設定する必要あり
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
   }
 );
// 2018/10/11 ここまで
}

private void gameLoop() {

}

}

2018/10/11:明日も仕事があるのでここまでにします(stop coding cause I have to work tomorrow.。

昨日、写経していてビルドエラーが出ていたのでエラーの解消をしようと調べていたところ、インストールの手順が違っていたようで。。。

Yester day I had installed different packages. and referenced different site.

そんなわけで、改めて。。。

参照するサイト (Eclipseの場合を参照します)

  1. ZIP bundleをダウンロードする
  2. eclipseでUserLibraryを作成
  3. そのライブラリに全てのJARファイルを設定する

プロジェクトを右クリック→ビルドパス→Java→BuildPath(ビルドパス)→ユーザーライブラリを選択

ここでライブラリを作成し、ダウンロードしたフォルダにあるJARファイルを全部設定します。

そして、改めて写経

package zenryokuservice.gui.jogl.prac;

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.*;
/**
 * LWJGL初めの練習用クラスです。
 * This Class is Hello LWJGL
 *
 * @see https://github.com/SilverTiger/lwjgl3-tutorial/blob/master/src/silvertiger/tutorial/lwjgl/Introduction.java
 *
 * @author takunoji
 */
public class LwjglPracLv1 {
   /** ウィンドウハンドラ */
   long window;
   /**
   * 初めに動くメソッドです。全てはここから始まる。。。<br/>
   * Java program start from main method...<br/>
   *
   * @param args Array of String
   */
   public static void main(String[] args) {
     LwjglPracLv1 lv1 = new LwjglPracLv1();
   }

   public void run() {
     System.out.println("Hello LWJGL " + Version.getVersion());
     // 初期処理
     init();
     // ゲームループ
     gameLoop();
     glfwFreeCallbacks(window);
     glfwDestroyWindow(window);
     System.out.println("終了処理");
     glfwTerminate();
     glfwSetErrorCallback(null).free();
   }

   /**
    *  初期処理
    */
   private void init() {
     // エラー時のコールバックに標準エラー出力を設定する
     GLFWErrorCallback.createPrint(System.err).set(); 
     // GLFWの初期化
     if (!glfwInit()) {
        throw new IllegalStateException("Unalbe to Initialize GLFW");
     }
     // GLFWの設定処理
     glfwDefaultWindowHints();
     glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
     glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); 
     window = glfwCreateWindow(300, 300, "Hello LWJGL", NULL, NULL);
     if(window == NULL) {
        throw new RuntimeException("Failed to create GLFW Window");
     }

     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
     }

  );
}

  // 写経元のコードでは「loop()」になっている
  private void gameLoop() {
   GL.createCapabilities();
   glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
   while ( !glfwWindowShouldClose(window) ) {
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer
      glfwSwapBuffers(window); // swap the color buffers
      glfwPollEvents();
   }
  }
}

写経完了!早速起動!。。。が起動してもすぐに終了!

画面が見れない!!!

はてどうしたものか?次へ続く(see you next page)


投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す