JOGL OpenGL in Java Lv1〜JOGLでハローワールド〜

イントロダクション

前回、JOGLのインストールとサンプルコードを実行しました。実行して動いたのを確認したので、今度は内容を理解します。

Introduction

Last time, we execute sample code and check blank view. And this time we learn sight of sample code.

 サンプルコード(Sample Code)

package zenryokuservice.gui.mtm;

import javax.swing.JFrame;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLCapabilities;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.awt.GLCanvas;

public class  MultiTaskManager implements GLEventListener {
   /** 初期処理 */
   public void init(GLAutoDrawable drawable) {
     // 画面を初期化する
     GL2 gl = drawable.getGL().getGL2();
     // black background(黒で初期化)
     gl.glClearColor(0, 0, 0, 0);
   }

  /**
   * Draw 2D graphics "H"
   * 2次元描画で"H”を描く
   */
   public void display(GLAutoDrawable drawable) {

      // 表示 start GL(GL2 or GL2)
      GL2 gl = drawable.getGL().getGL2();
      gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
      // draw in red
      gl.glColor3d(1, 0, 0);
      // draw "H"
      gl.glBegin(GL2.GL_LINES);
      // raw line
      gl.glVertex2d(-0.8, 0.8);
      gl.glVertex2d(-0.8, -0.8);
      gl.glVertex2d(-0.8, 0.0);
      gl.glVertex2d(-0.4, 0.0);
      gl.glVertex2d(-0.4, 0.8);
      gl.glVertex2d(-0.4, -0.8);
      // stop draw
      gl.glEnd();
   }

   public void dispose(GLAutoDrawable arg0) {
      //method body
   }

   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }

   public static void main(String[] args) {
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
               
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      MultiTaskManager b = new MultiTaskManager();
      glcanvas.addGLEventListener(b);
      glcanvas.setSize(400, 400);
      //creating frame
      final JFrame frame = new JFrame (" Basic Frame");
      //adding canvas to it
      frame.getContentPane().add(glcanvas);
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }//end of main
}//end of classimport    

読み始め(Start to read)

メインメソッド

Javaのプログラムは必ずメインメソッドから始まります。なのでまずはメインメソッドからみていきます。

Always Java program start in main method. so we watch from main method to end.

ステップ

  1. メインメソッドの起動〜GL2の生成:GLProfileを使用してGL2クラスを生成します。(2D描画に使用します)
  2. GLCapabilitiesを生成します。これはGLCanvasの生成に使用するクラスのようです。
  3. GLCanvasクラスを生成し、今回作成したクラス「MultiTaskManager」のインスタンスを作成して、Canvasに追加します。(Event登録します)、そして、表示するサイズをGLCanvasに設定します。
  4. JFrame(Swingの部品)を生成して、各種設定を行い表示処理を行います(setVisible(true))

Step

  1. From start main method to create GL2 class: using "GLProfile" and create GL2 class.
  2. create "GLCapabilities" class, for create GLCanvas class
  3. create "MultiTaskManager" class for set Event that OpenGL draw or some event. and set GLCanvas to draw something that we implemented.
  4. create JFrame(parts of Swing), and setting for JFrame to view.

重要なとこ

ここで重要なのは、〜GLの部品を最終的にJFrameに設定しているところです。

Swingでの描画(GUI)は土台にJFrame(Frame)を使用しています(他にはJDialoなど)。

Importants

It's important that XX_GL class set to JFrame. It's mean JFrame is base of view in Java Swing.

<登場人物(クラス)の整理>

  • GL2: 描画クラス->GLProfileクラスで作成(生成)される
  • 作成したクラス(MultiTaskManager) -> 各種イベントに対応する処理(今回は描画)
  • JFrame: 土台

オーバーライドメソッド(GLEventListenerのメソッド)

GLEventListenerインターフェースを実装(オーバーライド)する事で描画処理(display())を起動するときにその内容を定義(実装)できます。実際の処理はサンプルコードを見ればわかるように、「display」メソッドに実装してある内容が処理の結果として表示されています。

List of classes

MultiTaskManager class implements GLEventListener. that why execute "init()" , "diplay()" and "dispose" and "reshape". you can implements each method you would like to. it is "Override".

Hello Worldの「H」のみが描画されています。これは。。。そのように実装しているので。。。まぁそんなもんでしょう。

自分でいじってみようと思うならまず初めに「」メソッドからいじって見ると良いでしょう。自分もいじってみます(笑)

If you would like to implmets little bit code, then you implement "display()". I recommend. And I will implement too(笑).


Start OpenGL in Java〜JOGLで3Dモデリング?〜

イントロダクション(Introduction)

前回、JOGLのインストールをして開発の準備を行いました。

Last time, I wrote setting up JOGL. and prepare develop OpenGL in java.

ドキュメントを読み進める(Read Doc)

日本語:PDFはこちら → 申し訳ないが参考になりませんでした。。。

English : this PDF.→ こちらを参考にします。

メインイベント( Let's enjoy JOGL)

JOGLを使用して実装を行います。Swingなど初めてですって方も問題ありません。自分も初めての実装です(笑)。

Let's implement using JOGL!. do not mind if you have not know swing and more. I have implemented first JOGL(笑).

実装したコード(Implementation)

package zenryokuservice.gui.mtm;

import javax.swing.JFrame;

import com.jogamp.opengl.GL2;

import com.jogamp.opengl.GLAutoDrawable;

import com.jogamp.opengl.GLCapabilities;

import com.jogamp.opengl.GLEventListener;

import com.jogamp.opengl.GLProfile;

import com.jogamp.opengl.awt.GLCanvas;

public class MultiTaskManager implements GLEventListener {
   /** 初期処理 */
   public void init(GLAutoDrawable drawable) {
     // 画面を初期化する
     GL2 gl = drawable.getGL().getGL2();
     // black background(黒で初期化)
     gl.glClearColor(0, 0, 0, 0);
   }

  /**
   * Draw 2D graphics "H"
   * 2次元描画で"H”を描く
   */
   public void display(GLAutoDrawable drawable) {

      // 表示 start GL(GL2 or GL2)
      GL2 gl = drawable.getGL().getGL2();
      gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
      // draw in red
      gl.glColor3d(1, 0, 0);
      // draw "H"
      gl.glBegin(GL2.GL_LINES);
      // raw line
      gl.glVertex2d(-0.8, 0.8);
      gl.glVertex2d(-0.8, -0.8);
      gl.glVertex2d(-0.8, 0.0);
      gl.glVertex2d(-0.4, 0.0);
      gl.glVertex2d(-0.4, 0.8);
      gl.glVertex2d(-0.4, -0.8);
      // stop draw
      gl.glEnd();
   }

   public void dispose(GLAutoDrawable arg0) {
      //method body
   }

   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }

   public static void main(String[] args) {
      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
               
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      MultiTaskManager b = new MultiTaskManager();
      glcanvas.addGLEventListener(b);
      glcanvas.setSize(400, 400);
      //creating frame
      final JFrame frame = new JFrame (" Basic Frame");
      //adding canvas to it
      frame.getContentPane().add(glcanvas);
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }//end of main
}//end of classimport    

実行結果

参考にしたPDFには問題が載っています。

This PDF have a Question as bellow.

<Question: 問題>

"H"は描いたけれどもう1つ"W"を描きたいのですがどの用に描いたら良いでしょうか?描いてください。

  •  This was code for drawing an “H”.
  •  How to draw an “W” besides it?
  •  Which coordinate system is used?

次回(Next)

作成したコードを解析します。(Analyze this code)


Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜

イントロダクション

ゲームというより、タスク・スケジュール・ロードマップ管理アプリケーションの作成を行います。(Swingの扱い方やオブジェクト指向についてもやります)

使うのはJOGL (Java版のOpenGL)です。土台になるのはSwingです。つまり画面の外側はSwingで内側(コンポーネント)はJOGLで表示します。

Introduction

I will create a Task, Schedule and Roadmap Manager using java. (I will write Swing and Object-orientation).

And Using Swing and JOGL(OpenGL in java). I mean that Swing create Frame of view, JOGL create Content of view.

インストール(how to Install)

こちらのページを参考にやります。( see this page)

インストール方法(How to install)

https://www.tutorialspoint.com/jogl/jogl_installation.htm

ダウンロード(Download)

http://jogamp.org/deployment/jogamp-current/archive/

ダウンロードするファイル一覧(List of download)

  1. jogamp-all-platforms.7z
  2. glugen-javadoc.7z
  3. jogl-javadocs.7z

1〜3のファイルにビルドパスを通す(Set to buildpath in Eclipse)

  • gluegenrt.jar
  • jogl-all.jar
  • gluegen-rt-natives-macXXX.jar
  • jogl-all-natives-macXXX

ついでなので、LWJGLのファイルもビルドパスを通します。ファイルのダウンロードはこちら JOGLはこのフレームワークに同梱されています。

1.Eclipseの設定を開きます。

2.Java-BuildPath-UserLibralyを開きます。

3.ライブラリを作成します。(Newボタンを押下)

そして、Editを押下してライブラリにLWJGLのファイルを全部追加します。

※頭に「lwjgl-」がついているファイル全てです。

サンプルコード:ここのページからコピーしたものをちょいと修正(赤文字)

Sample Code : little bit change source from this page (red charactor is changed)

package zenryokuservice.gui.mtm;
import javax.swing.JFrame;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLCapabilities;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.awt.GLCanvas;

public class MultiTaskManager implements GLEventListener {

   public void display(GLAutoDrawable arg0) {
      // method body
   }

   public void dispose(GLAutoDrawable arg0) {
      //method body
   }

   public void init(GLAutoDrawable arg0) {
      // method body
   }

   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // method body
   }

   public static void main(String[] args) {

      //getting the capabilities object of GL2 profile
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      MultiTaskManager b = new MultiTaskManager();
      glcanvas.addGLEventListener(b);
      glcanvas.setSize(400, 400);

      //creating frame
      final JFrame frame = new JFrame (" Basic Frame");
      //adding canvas to it
      frame.getContentPane().add(glcanvas);
      frame.setSize(frame.getContentPane().getPreferredSize());
      // It's impotant this is mwaning "window close and stop JVM"
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);

   }//end of main
}//end of classimport    

実行した時のキャプチャ

次回(Next)

実際に描画をやってみます。実際には2D描画です。

I will create program for draw 2D Line.

実際は2D表示(2D drawing)


[rakuten ids="advancedselect:10000013"]


Memos Java OpenGL〜メモJOGL開発メモ〜

イントロダクション

Unity、UE4などゲーム開発のツールを検討したけど、自分の計画的に表題のJOGLLWJGLを使用するのが適当と判断しました。

※結局Eclipseで開発することにしたので、LWJGLで実装することにしました。

Inroduction

I have used Unity and UE4(little bit), but I would like to use LWJGL in Ecllipse.

理由

その1

LWJGLを含め、フレームワークを使用するという事は、そのフレームワークのルールを覚える必要がある。これは汎用的に使える知識ではないのと、もう少し低レベルのAPIを使うため、だったのですがJOGLだと勉強量が多すぎるのでLWJGLを使うことにしました。

その2

java.swingとの連携を考慮した。フレームワーク経由だとそのフレームワークで指定する表示方法に依存するため。LWJGLはSwingとの親和性が高いので問題なしになりました。

Reason

FIrst

Using Framework, It is mean learn the rule of The framework. so I use JOGL. But LWJGL is better than JOGL only. That's why I will use LWJGL.

Second

JavaSwing is much for LWJGL so I will use one.

参考サイト

JOGLチュートリアル

https://www.tutorialspoint.com/jogl/jogl_installation.htm

ダウンロード先(Download From this)

LWJGL3.2.0  ※2018-10-08

実装ガイドのチュートリアル

LWJGLの古い方と新しい方で実装が違うので注意

Caution: It has a different of  iimplementation.

Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜

Start OpenGL in Java〜JOGLで3Dモデリング?〜

 

JOGL OpenGL in Java Lv1〜JOGLでハローワールド〜

ゲーム作成 調査メモ 〜魔術・呪術etc〜

テキストRPGを作る

テキストRPGを作るために、クラス図を作成していきます。

そして、作成している最中「魔法・じゅもん」に関する定義を行おうとした時に以下の調査が必要になったので、メモがてらに列挙します。
NPCクラスを定義する

2020-03-08現在では以下のような形で設計しています。ちなみにUMLで記載しています。

無料のモデリングツールもあります。ちなみに筆者はStar UMLを使用しています。
他にもAstahなどが有名です。

魔術関連

魔術書一覧
・ソロモンの鍵
・レメゲトン
・ネクロマンサーズマニュアル
※禁断の儀式、15世紀の降霊術師のマニュアル
・ピカトリクス
・ガルドラポーク

密教呪術
http://songoku.shenron.jp/Memo/Doc/Memo028.pdf

魔術団体

黄金の夜明け団

銀の星

東方聖堂騎士団

記号

四大元素の記号

四元素(よんげんそ、ギリシア語: Τέσσερα στοιχεία)とは、この世界の物質は、火・空気(もしくは風)・水・土の4つの元素から構成されるとする概念である。 四元素は、日本語では四大元素、四大、四元、四原質ともよばれる。

錬金術の金属

錬金術(れんきんじゅつ)は、最も狭義には化学的手段を用いて卑金属から貴金属(特に金)を精錬しようとする試みのこと。

生命の樹

生命の木とは、神話学などにおいて、世界の諸神話に広く見られる、生命を象徴する木という神話モチーフを類別する概念である。 代表的なものに北欧神話の世界樹、聖書の生命の樹、仏教の娑羅樹、メソポタミアの"生命の木"、アッティスとキュベレーの神話、常世国の非時香菓(ときじくのかぐの木の実)を成らせる木などのモチーフがある。

マナス

神智学の定義によるマナス(英: Manas)とは、人間の心、知性、自我を司っている不可視の身体である。英語のMindと相応している。

魔術

魔術(まじゅつ)とは、仮定上の神秘的な作用を介して不思議のわざを為す営みを概括する用語である。魔法(まほう)とも。 人類学や宗教学の用語では呪術

参考資料

ヨーガ式体と精神の繋がり、関連性についての参考資料
[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

サーンキャとヨーガ [ 真下 尊吉 ]
価格:3300円(税込、送料無料) (2020/3/8時点)

呪術・占い関連
[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

呪術秘法の書 神仏呪法実践読本 [ 黒塚信一郎 ]
価格:1540円(税込、送料無料) (2020/3/8時点)