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 時代は画面クリアするだけでどれほどかかったことか(笑)

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

EPSON 複合機のスキャナをネットワーク越しで使う

ある日、我らが MMRT Daily Life を拝見しておりますと、Ubuntu 10.04 にプリンタの設定をされているではないですか。 そうだ、忘れていた! ということで、ぼくも Ubuntu にプリンタ設定をやろうとして、はたと思い出す。

そうだ、複合機のスキャナをネットワーク越しに使おう!(←いんすぱいあざねくすと)。。

Ubuntu10.04とMP600 – MMRT daily life

ウチのMP600はNASにぶら下がったネットワークプリンタなのですが、さすがにスキャナーは使えません。ってか、XPでも無理! 買替えるならLinuxにも強い最近評判のブラザーがいいのかなぁ?とか妄想中です。 :)

うちの EPSON PM-A890 はプリンタ + スキャナの複合機、これが USB で CentOS に接続されています。 NAS につなぐのと一緒ですね。 🙂

普段は Windows からネットワークプリンタとして使われていますが、Masayan さんと同じようにこの接続形態にするとスキャナが PC から使えない、というわけででてくる、sane-backend のお話です。

sane01

sane に関しては昔ずいぶん苦戦して設定したもんですが(そしてなんか安定しなくて使っていなかった)、CentOS も新しくしたし意外とすんなりいくのではという淡い期待の元作業開始。

Linux でスキャナを使うのが sane という一連のパッケージで、アプリケーションがスキャナフロントエンドとバックエンドにプログラムが分かれています。 フロントエンドとバックエンドはネットワーク越しに通信できるので、これを利用してネットワークスキャナにしてあげる感じです。

てなわけで、まずはバックエンド、スキャナが USB でつながっている CentOS 側の設定。

sane-backend のインストール、EPSON の Linux ドライバのインストール。

Linuxドライバー|アヴァシス株式会社

ホーム > 製品/サービス > Linuxドライバー

ドライバの .rpm をダウンロードした上でこんな感じでした。 依存関係でひとつおこられたので、libtool-ltdl パッケージを入れています。

# yum install sane-backends
# yum install libtool-ltdl
# rpm -ivf iscan-2.24.0-4.i386.rpm 

/etc/sane.d/dll.conf に epkowa が入っていることを確認。(なければ追加です)

#umax_pp
umax1220u
v4l
#
# The following backends are not included in the sane-backends distribution
# If you want to use them, download them from their webpages and read their
# documentation 
#
# HP OfficeJet backend homepage: http://hpoj.sf.net/
# Uncomment the following line if hpoj is installed:
#hpoj
epkowa

ドライバが読まれているか sane の scanimage コマンドで確認。

$ scanimage -L
device `epkowa:usb:001:003' is a Epson (unknown model) flatbed scanner

epkowa デバイスでてきたら、ばんざい。 🙂

でもって、ネットワーク経由で sane-backend を起動するために、xinetd のインストールと、conf の設定。 saned ファイルをつくって xinted を restart です。

# yum install xinetd
# cat /etc/xinetd.d/saned 
service sane-port
{
    disable     = no
    port        = 6566
    socket_type = stream
    wait        = no
    user        = root
    server      = /usr/sbin/saned
}
# service xinetd restart

6566 ポートを iptabels でふさいでいたら開けてあげます。これでバックエンド側の準備は完了です。

次はフロントエンド。 まずは Ubuntu 10.04 からやってみます。

10.04 のデフォルトインストールに Simple Scan というアプリが入っています。 これも sane を使っていますので、sane の以下のファイルを編集してネットワークを見に行かせます。 192.168.0.100 はバックエンドをいれた CentOS の IP アドレスです。

$ cat /etc/sane.d/net.conf 
# This is the net config file.  Each line names a host to attach to.
# If you list "localhost" then your backends can be accessed either
# directly or through the net backend.  Going through the net backend
# may be necessary to access devices that need special privileges.
# localhost
192.168.0.100

これで Simple Scan を起動してスキャンボタンをおせばネットワーク越しにスキャナが動いてスキャンされるハズです。 Simple Scan はその名の通りシンプルなので、別アプリ xsane をいれると以下のように詳しい感じでスキャンできます。

sane02

次は Windows。

Windows でスキャナを使うときは Twain というのを使うことが多いと思いましたが、Twain と sane をブリッジしてくれる SaneTwain というアプリがあります。 とりあえず、これに Sane のフロントエンドが含まれていますのでこちらで。(実は Windows 7 で Twain の動かし方が分からなかった。。

SaneTwain

When I bought a new scanner some time ago, I chose one which was supported by SANE, as it seemed logical to me to connect it to my Linux server, so I could use it from my regular Windows desktop, or from my laptop.

ScanImage.exe を動かして、バックエンドの IP アドレスを指定します。

sane03

設定も細かくできますね。

sane04

よい。 🙂

さてさて、スキャナも使えるようになったしようやく次は Ubuntu からプリンタを。。

[tegaki]ずがーん! 64bit 版のバイナリがないっ![/tegaki]

64bit 問題勃発。。(笑)

実は EPSON さん Linux ドライバはソースも公開されているので、コンパイルすれば 64bit 版のドライバつくれるのですが、相次ぐ依存関係の欠如のため今日はダウン。。 また次回に。。(←弱い。。

Ubuntu Netbook Remix に XBMC をインストール

先日インストールしました Ubuntu 10.04 Netbook Remix の調子がいいので、IdeaPad 動作用にマルチメディアプレイア XBMC を動かしてみました。

Netbook Remix もフル画面インターフェースを準備していますが、XBMC も基本フル画面なので相性がいいかなという趣旨でしたが、やはりこれがなかなかよい。 16:9 液晶をもつネットブックをポータブルプレイアするのにちょうどいいのではないでしょうか。 🙂

About  XBMC

XBMC is an award-winning free and open source (GPL) software media player and entertainment hub for digital media.

XBMC は初代 XBOX をはじめいろいろなプラットフォームで動作しますが、ここでは Ubuntu Netbook Remix で動かしています。 PPA にリポジトリがありますので、インストールは簡単。

HOW-TO install XBMC for Linux on Ubuntu, a Step-by-Step Guide – XBMC

If you are using Ubuntu 9.10 or higher, you have the option of a more streamlined install. Load the terminal window and issue the following:

数行、こぴって終了です。

一応言語ファイルも日本語が用意されていますが、ファイル名とかに日本語だすには自前でフォント描いている関係で日本語のフォントの登録が必要です。

hiromasa.another o)» Blog Archive » XBMC for Linux 日本語化

てなわけで、Linux 版の日本語化の方法です。 XBMC は FreeType ライブラリで自前でフォントをレンダリングするので、フォントを内蔵しています。 Ubuntu の .deb からいれると、フォントのありかは以下です。

てなわけで、16:9 液晶で動かすとこんなかんじ。 デフォルトテーマがバージョン 9 から変更になっています。 前のも好きでしたが。 😀

xbmc01

ネットワーク越しでの動画ファイルや音楽ファイルの再生も可能です。 いろんなプロトコル対応していますが、とりあえず Windows のファイル共有(samba)ごしに。

xbmc03

動画の場合はこんな感じにサムネイルが。 音楽の時も、画像が埋め込まれていたらでてくれます。 ありこちぬるぬる動くのが気持ちいいです。  🙂

オープンソースで育っているだけあって、再生に関するいろいろ配慮が行き届いているのが特徴で、たとえば動画のサイズやその際に使われる拡大系のフィルター、またインターレース解除などの設定がリアルタイムに設定できます。

screenshot004

これがやっぱり便利ですね! またキーボードのマルチメディア系のボタン(音量とか)にも独自に対応していますので、フルスクリーンインターフェースの中できれいに操作することができます。

てなかんじで、ネットブックがあっというまにポータブル DVD プレイアになりますので、なかなか便利かもしれません。 ローデフの動画なら ATOM でもコマオチなどはせずにスムーズに動きます。

ATOM + ION + HDMI の小型 PC にいれてテレビに映したりもしてみたいのですが、それはまだ叶わぬ夢。。 😀