Java + LWJGL + OpenGL で 2D ゲーム

先日、事務所の先輩と話をいたしておりまして、ゲームつくりますか、やろうやろう、みたいな進行に 🙂

ということでとりだしてきました、 OpenGL の Java ラッパー LWJGL。 OpenGL で古き良き 2D 描画をなんとか再現してやろうかと奮闘中であります。

Web で 3D を描く WebGL とかも同じような感じですし、iPhone/touch も Android も OpenGL ですし最近あちこちに OpenGL があふれていますね。

てなわけで、LWJGL というのは、Java 向けにかかれたゲームライブラリで、基本的には OpenGL (や音声、入力部)への薄いラッパです。

lwjgl.org – Home of the Lightweight Java Game Library

LWJGL provides developers access to high performance crossplatform libraries such as OpenGL (Open Graphics Library) and OpenAL (Open Audio Library) allowing for state of the art 3D games and 3D sound. Additionally LWJGL provides access to controllers such as Gamepads, Steering wheel and Joysticks. All in a simple and straight forward API.

OpenGL のコマンドを native に変換してくれる static メソッドがいっぱいある感じで、Linux、Windows、Mac、Solaris と各 native jni が用意されているので、Java と組み合わせることでいろんな環境でゲームなどのプログラムを動作させることができます。

これが速いし、みなさんに twitter で試していただいたところ、Windows、Linux、Mac の各 32/64bit でちゃんと動作したりしてなかなかよくできているようです!

Ubuntu 10.04 / 64bit での動作。

sprite01

Windows 7 / 32bit での動作。

sprite02 

すばらしいっ。

で中身の方なんですが、ぼくはゲームのプログラムというと CPU のクロックが 4MHz とか 8MHz だった時代(間違えのようなクロックですが本当です)でしかやったことがなかったので、どうしていいのやら(笑)

なんとなくイメージ的に 2D でも 3D の機能をつかって、四角いポリゴンをつくってそこにテクスチャーをはってスプライトや背景を実装するというのは知っていたので、あちらこちらのソースを参考につくってみました。

  • キャラクタスプライト。 小さな GL_QUADS をたくさん表示させて実装。 RGBA の透過と、1テクスチャに複数のアニメパターンを描いて切り替えて表示するのも実装。
  • マップ型 BG面。 配列をよんでチップを選択してテクスチャからタイルパターンを FBO(Frame Buffer Object)に描画して 1枚絵にしてから貼り付けて実装。
  • 1枚絵の BG面。 ただでっかいテクスチャを貼り付けただけ。 だとつまらなかったので、ピクセル(フラグメント)シェーダを登録してライト的な効果をつけてみた。

こういうやり方があっているのかどうか、まったく分かりません。 むしり取った衣笠と併せて超手探りです(笑)

ソースとかまだめっちゃくちゃで試している状態ですが、もし気になる方がいらっしゃいましたら実際に動かしてみてください。 Java Web Start を使っていますので、以下をクリックして「プログラムで開く」してもらえれば、大抵の環境でそれとなく動くと思います。

jws 

(Ubuntu の方は sun-java6 じゃないとだめかもです。 OpenJDK は未確認)

リソースとかまだ借り物ですごめんなさい。 作成中のものがおいてありますので、ここで書かれているものより機能が追加されているかもしれません。

てなわけで、環境によっては 1000フレームを超えるとのことで、恐るべき時代ですね。 (よしともさんいつもありがとうございます!)

昔は処理速度稼ぐために「描かなくていいところは描かない」ことが基本でしたが、いまなんかフルフレームで全描換えですもんねぇ。 8bit 時代は画面クリアするだけでどれほどかかったことか(笑)

などと遠い目をしつつもうちょっとがんばってみたいと思います。 🙂

Java + LWJGL + OpenGL で 2D ゲーム」への2件のフィードバック

  1. 上のリンク先のやつは、
    FPS 484~532 くらいで推移しました~。

    CPU: Core 2 Duo T9600 2.8GHz
    Memory: DDR3 4GB
    GPU: Mobility RADEON HD 3650
    OS: Windows 7 32bit

  2. おぉ、さんくすぼす。 🙂
    60コマでればいいので超余裕ですね!
    おかげさまで環境的なくせがだんだん分かってきたのでそろそろ何か動くものがつくれそうでっす。

コメントを残す