WebGLを利用したHTML5なquake2

WebGLを利用したHTML5なquake2 がリリースされたらしいので試してみた。
http://jp.techcrunch.com/archives/20100401google-html5-quake/

マシン:windows xp
スクリプトをどうさせるサーバ: VMWARE(debian lenny)

結果、、、うまく動きませんでした(涙

とりあえずやったことを書いときます。

とりあえずWebGLを体験してみる。

HTML5なquake2は、結構手順が複雑なので、挫折する前に WebGLを体験してみることにした。

WebGL対応の Chromeをダウンロードしてくる。
http://code.google.com/p/quake2-gwt-port/wiki/CompatibleBrowsers

現在WindowsXPを利用しているので、 windows版をダウンロード。
http://build.chromium.org/buildbot/continuous/win/LATEST/chrome-win32.zip

chrome を立ち上げるときに、以下のオプションをつけて実行する。
面倒ならバッチファイルを作るのも手か。

こんな警告がでているなら、とりあえずコマンドラインは正しいと思われる。

では、WebGLのデモである地球と火星がくるくる回る奴にアクセスしてみる。
https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/demos/webkit/Earth.html

こんな感じで地球と火星がくるくるしたら成功。


非対応ブラウザで閲覧すると、こんな感じに真っ白になるよ。

前置きはこんな感じで HTML5で quake2 を遊ぶためにセットアップを行ってみる。
サーバをwindowsで作るのは大変そうなので、vmware 上にlinuxをインストールして構築してみた。

まずjavaが必要らしい。
java嫌いなので当然インストールしていない。

quakejava への移植 maven2 を基にしているらしいので、maven2 を入れてみた

#apt-get install maven2 
(このとき build-depにしなかったのはミスだった気がする)

よし、プログラムを hg サーバから export してこよう。

#hg clone https://quake2-gwt-port.googlecode.com/hg/ quake2-gwt-port
#cd quake2-gwt-port

よし、では HTML5なquake2をビルドしてみよう。。。

#./build-dedicated-server
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Command [[
/bin/sh -c /usr/lib/jvm/java-1.5.0-gcj-4.3-1.5.0.0/jre/bin/java -Xmx512m -classpath "/home/rti/public_html/quake2-gwt-port/maven-build/client/../../src":"/home/rti/public_html/quake2-gwt-port/maven-build/client/src/main/resources":"/home/rti/public_html/quake2-gwt-port/maven-build/client/target/classes":"/root/.m2/repository/com/google/gwt/gwt-servlet/2.0.0/gwt-servlet-2.0.0.jar":"/root/.m2/repository/com/google/gwt/gwt-user/2.0.0/gwt-user-2.0.0.jar":"/root/.m2/repository/com/google/gwt/gwt-dev/2.0.0/gwt-dev-2.0.0.jar" com.google.gwt.dev.Compiler -gen "/home/rti/public_html/quake2-gwt-port/maven-build/client/target/.generated" -logLevel INFO -style OBF -war "/home/rti/public_html/quake2-gwt-port/maven-build/client/target/gquake-client-1.0-SNAPSHOT" -localWorkers 1 jake2.GwtQuake
]] failed with status 1
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 24 seconds
[INFO] Finished at: Sat Apr 03 03:08:56 GMT+09:00 2010
[INFO] Final Memory: 40M/58M
[INFO] ------------------------------------------------------------------------

ビルドエラー....なにー。

何が悪いのかよく分からないけど、 debianjava は sun の javaではなく、 gij っていうのを使っているのがダメなのか?


java と入力すると gij が文句を言ってくる

#java
Usage: gij [OPTION] ... CLASS [ARGS] ...
          to invoke CLASS.main, or
       gij -jar [OPTION] ... JARFILE [ARGS] ...
          to execute a jar file
Try `gij --help for more information.

よくわからないので、sun の javaインスコすることにした。
これが結構メンドイ。
(centosだとOS yum install java でOKだったんだけどなぁ、、、)

参考
http://www.net-phantom.jp/blog6/2009/03/debianjavajava6.html

(今思えば、 apt-get install openjdk-6-jdk の方がよかったかも。。。)


non-free をaptラインに追加する

#vi /etc/apt/source.list
---------- source.list ----------
deb http://cdn.debian.or.jp/debian/ lenny  main contrib
↓
deb http://cdn.debian.or.jp/debian/ lenny  main contrib non-free
---------------------------------

一度アップデートして non-freeなデータを読み込ませる

#apt-get update

インスコ

#aptitude install sun-java6-jdk sun-java6-demo sun-java6-source sun-java6-doc sun-java6-plugin sun-java6-fonts

途中でなにやらライセンスを聞いてくるので、とりあえずOKを選ぶ。

ところが途中でまた文句を言ってきた。
ドキュメントがらしい。知らねーよ、そんなもの。。。メンドイなぁ。

Setting up sun-java6-doc (6-12-1) ...
This package is an installer package, it does not actually contain the
JDK documentation.  You will need to go download one of the
archives:

    jdk-6u12-docs.zip jdk-6u12-docs-ja.zip

(choose the non-update version if this is the first installation).
Please visit

    http://java.sun.com/javase/downloads/

now and download.  The file should be owned by root.root and be copied
to /tmp.

[Press RETURN to try again, 'no' + RETURN to abort]

仕方ないので sunのサイトからダウンロードする。メンドイ。

アクセス
http://java.sun.com/javase/downloads/

そして、 tmp にこんな感じに展開する。
/tmp/jdk-6u12-docs-ja.zip

そしたら、インストーラーを再び起動させると、今度はうまくいった。

//もう一回インスコ

#aptitude install sun-java6-jdk sun-java6-demo sun-java6-source sun-java6-doc sun-java6-plugin sun-java6-fonts

//こんどはうまくいった。
Writing extended state information... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done

念のため java と入力してみる。

#java
Usage: gij [OPTION] ... CLASS [ARGS] ...
          to invoke CLASS.main, or
       gij -jar [OPTION] ... JARFILE [ARGS] ...
          to execute a jar file
Try `gij --help for more information.

あれーなんで?

何かシステムで呼び出す優先度を変えるらしい。

//まずjava
#update-alternatives --config java
There are 3 alternatives which provide `java'.

  Selection    Alternative
-----------------------------------------------
          1    /usr/bin/gij-4.3
*1270239708*+        2    /usr/lib/jvm/java-gcj/jre/bin/java
          3    /usr/lib/jvm/java-6-sun/jre/bin/java      ←これを選択

Press enter to keep the default[*], or type selection number: 3

//次に javac
#update-alternatives --config javac
There are 4 alternatives which provide `javac'.

  Selection    Alternative
-----------------------------------------------
          1    /usr/bin/ecj
          2    /usr/bin/gcj-wrapper-4.3
 +        3    /usr/lib/jvm/java-gcj/bin/javac
*1270239709*         4    /usr/lib/jvm/java-6-sun/bin/javac         ←これを選択


//ついでに JAVA_HOME も定義する
#export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre/


こんどは、どうだ

#java
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
以下略

OKOK。3つも設定した会があったというものだ。ちゃんといったっぽい。
javaアレルギーなんでよくわかんないけど、これでOKらしい。

やっと、本題の HTML5なquake2をビルドしてみよう。。。
最初に失敗したビルドコマンドは今度こそ大丈夫だろうか。

#./build-dedicated-server

〜略〜

[INFO]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] GwtQuake .............................................. SUCCESS [2.186s]
[INFO] GwtQuake Client ....................................... SUCCESS [52.139s]
[INFO] GwtQuake Dedicated WebSocket Server ................... SUCCESS [8.680s]
[INFO] GwtQuake Demo Installer ............................... SUCCESS [7.819s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 11 seconds
[INFO] Finished at: Sat Apr 03 03:46:22 JST 2010
[INFO] Final Memory: 36M/63M
[INFO] ------------------------------------------------------------------------

おー今度はうまくいったよ。


さらに次のコマンドを実行する(さっき実行した./build-dedicated-serverとは別)

#./install-resources

〜略〜
lame not found
textures/e1u1/+9comp11_1.wal
models/objects/r_explode/skin3.pcx
textures/e1u1/c_met5_1.wal
sound/world/curnt1.wav
lame not found
env/unit1_bk.pcx
textures/e1u1/floor3_3.wal
textures/e1u1/rocks16_2.wal
sound/world/force3.wav
lame not found

げげ、lame がないらしい。
debianでは特許の問題で lame がないらしい。ちきしょー

仕方ないのでソースからlameを入れる。

参考:
http://d.hatena.ne.jp/paraches/20061215/1166191102

//必須ライブラリがないとか言われるので先回りして入れておく
#apt-get install libsndfile1-dev nasm libncurses5-dev

//lameのソースを拾ってくる。
#wget http://jaist.dl.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz
#tar zxvf lame-3.98.4.tar.gz
#cd lame-3.98.4

//パッケージの作成
#dpkg-buildpackage -rfakeroot

//作成したパッケージのインスコ(一つ上の階層にできるらしい)
#dpkg -i ../lame_3.98.3_i386.deb

//動作確認
#lame 
LAME 32bits version 3.98.4 (http://www.mp3dev.org/)

usage: lame [options] <infile> [outfile]

    <infile> and/or <outfile> can be "-", which means stdin/stdout.

Try:
     "lame --help"           for general usage information
 or:
     "lame --preset help"    for information on suggested predefined settings
 or:
     "lame --longhelp"
  or "lame -?"              for a complete options list


OKOK。ちゃんと入ったぞ。
んぢゃあ、さっきの失敗したコマンドをもう一度やってみよう。

#./install-resources

〜略〜
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11 seconds
[INFO] Finished at: Sat Apr 03 04:34:05 JST 2010
[INFO] Final Memory: 19M/61M
[INFO] ------------------------------------------------------------------------

よし。できた。
今までのできたサーバを起動させてみよう。

#./run-dedicated-server 8080

2010-04-03 04:35:43.538::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2010-04-03 04:35:43.578::INFO:  jetty-6.1.x
2010-04-03 04:35:43.622::INFO:  Started SocketConnector@0.0.0.0:8080
couldn't exec config.cfg
couldn't exec config.cfg
ServerWebSocketImpl(27910)
2010-04-03 04:35:44.107:INFO::Logging to StdErrLog::DEBUG=false via org.eclipse.jetty.util.log.StdErrLog
Starting Server
2010-04-03 04:35:44.110:INFO::jetty-7.0.1.v20091125
2010-04-03 04:35:44.153:INFO::Started SelectChannelConnector@0.0.0.0:27910
Server started
ServerWebSocketImpl(27901)
Starting Server
2010-04-03 04:35:44.155:INFO::jetty-7.0.1.v20091125
2010-04-03 04:35:44.158:INFO::Started SelectChannelConnector@0.0.0.0:27901
Server started
==== ShutdownGame ====
==== InitGame ====
------- Server Initialization -------
====== Quake2 Initialized ======

うーん何かいいかんじぢゃなーい?

ブラウザでアクセスしてみる。
http://192.168.195.129:8080/
(注意:192.168.195.129はVMWAREIPアドレス。)

OKOK。サーバは動いているな。

では、めいんでぃっしゅの quake2 起動。
http://192.168.195.129:8080/GwtQuake.html


あれ、、動かない。。。。orz


あれー?
もしかして、127.0.0.1 ではないから?
IEの信頼されたホストみたいなもんがchromeにもあるのかなー?
よくわからないけど、これではダメらしい。

で、そんなこともあろうかと、 stone を用意しておいたのさ。
http://www.gcd.org/sengoku/stone/Welcome.ja.html

stone でポートを転送してあげれば、ブラウザから見て、ローカルホストになるだろう。これで万事問題なし!!

ローカルのwindows xp で実行。
ローカルの127.0.0.1:8080 を サーバを立ち上げた VMの192.168.195.129:8080 に転送。

//これはホストマシンのwindows機で実行すること。
//VMWAREでやったら意味ないよ。
stone.exe 192.168.195.129:8080 127.0.0.1:8080

もう一度アクセス。
http://localhosts:8080/GwtQuake.html

やっぱり動かない。

サーバには、nextmap: demo2 でとまっていた。HTTPリクエストは受け付けるから、サーバが死んだわけではないみたい。

Server started
==== ShutdownGame ====
==== InitGame ====
------- Server Initialization -------
====== Quake2 Initialized ======

nextmap: demo2             ←ここでとまる

なんでー?
windowsだから?
でもさー、他の WebGLのデモは動くんだぜ。
←これとか

なぜだー