空間内の物体がすべてCPU (コンピュータ)を持っているような世界を 考えて見てください。 地面も車も飛行機もそれぞれ異なるCPU によってコントロールされています。 物体の動作はCPU が実行するプログラムによ って決められています。
J3W では,CPU が主役で物体はCPU がプログラムにしたがって生成し ます。CPU が「10秒間で100m前」という命令を実行すると,物体が10秒 間で100m前進します。同時に別の物体の別のCPU が「1秒間で360度回転」 という命令を実行すれば,その物体はそこで1回転します。同様にいくつでも CPU を用意すれば,その数の物体を独立して運動させることができます.
J3W は3次元グラフィックライブラリではありません。物体の形状と動き, その速さ等を定義したファイルを作成し実行することによって,本キット単 独で自由に3次元ポリゴンアニメーションを構築することが可能です.
オブジェクトファイル(拡張子がJ3D)をソースファイルに使用する言語と 独立させるため,オブジェクトファイルを作成するアセンブラ(j3dasm) とオブジェクトファイルを実行するアプリケーション(j3w)と分けてあ ります。さらにJAVA風の言語コンパイラ(j3c)によってアセンブラの 入力ファイルを作成できます.
提供するj3w651.tar.gzは,以下のファイルで構成されています。
j3w-651ディレクトリ
README.utf8 j3wの使用法(このファイル) history.txt J3Wの歴史 sample.txt サンプルソースの説明 COPYING GNU General Public License gpl.text GNU General Public License 日本語訳 (UTF8に変換) ftp.sra.co.jp/pub/gnu/local-fix/GPL2-j/より転載 j3 j3w, j3c, j3dasm 用 GUIフロントエンド (tcl/tk) j3cc コンパイル,アセンブルを連続して実行する シェルスクリプト j3opt.pl 「おまけ」j3cの出力の最適化ツール (j3m-->j3o) Perlスクリプト, /usr/bin/perl が必要。 Makefile make でj3c, j3w, j3dasmがコンパイルされます。
j3dディレクトリは 各種サンプルのJ3W用実行形式ファイル.
*.j3d 各種サンプルの実行形式ファイル list_*.j3d j3ctutor.htmlのリストの実行形式ファイル list*.j3d tutorial.htmlのリストの実行形式ファイル frame_2.dat 人体モデルアニメーションのデータ 空手 frame_3.dat 人体モデルアニメーションのデータ 走る人間
htmlディレクトリは HTMLで書かれたオンラインドキュメント。
index.html J3Wの紹介と総目次 tutorial.html J3Wプログラミング入門 j3w_m??.html J3Wリファレンスマニュアル j3ctutor.html J3Cプログラミング入門 j3c_spec.html J3C言語の詳細 j3c_func.html J3C組み込み関数の解説 pose_man.html 人体アニメーションpose.j3dの使用法 j3c_pngディレクトリ j3c_spec.htmlの画像ファイル
j3c_scriptディレクトリには以下のサンプルのソースディレクトリがあります.
Makefile j3c_script以下のソースから j3d を作成 flight フライトシミュレータのソース objview オブジェクトビューアのソース test j3c のテスト用ソース lib 他のサンプルから使用されるライブラリ tutorial j3ctutor.html内のソース
j3w_scriptディレクトリには以下のサンプルのソースディレクトリがあります.
Makefile j3w_script以下のソースから j3d を作成 pose 人体アニメーションエディタのソース human 人間が走るアニメーション flight フライトシミュレータのソース sample 簡単なサンプルのソース objview オブジェクトビューアのソース house マンションの一室を探検 lib 他のサンプルから使用されるライブラリ tutorial tutorial.html内のソース
blender ディレクトリには 以下のファイルがあります.
blendview.j3c blenderが出力するblend.j3cを使うデモ j3cExporter.py blender に組み込むエクスポート用Pythonスクリプト
sourceディレクトリは j3w, j3c, j3dasmのソースがあります.
最近のLinuxディストリビューションには開発環境がインストールされていない場合があります。 GNU Make と g++、libX11 が必要です。Debian や Ubuntu では次のようにインストールしてください。
bash$ sudo apt-get install g++ bash$ sudo apt-get install xorg-dev
(以下の説明中で bash$ はコマンドプロンプトです。入力の必要はありません) まず適当なディレクトリで解凍(展開)します。
bash$ gzip -dc j3w651.tar.gz | tar xvf -
または
bash$ tar zxf j3w651.tar.gz
j3w-651ディレクトリへ移動します。
bash$ cd j3w-651
コンパイルは make の実行だけで問題ないと思います。 64bitアプリケーションとしてコンパイルする場合は Makefile を編集して BIT64 = 1 を有効にしてください。
bash$ make
コマンドサイズを小さくする場合は(オプション):
bash$ make strip
インストールはスーパユーザ(root)権限が普通必要です。 デフォルトでは /usr/local/bin にインストールされます。
Redhat系のディストリビューションでも /usr/local/bin 以下に インストールされたファイルは rpm の管理外なので勝手にコンパイル してインストールしても問題ないと思います。
bash$ su -c 'make install'
/usr/local/bin がコマンドの検索パスに含まれていない場合は, export PATH=/usr/local/bin:$PATH (bashの場合) PATH=/usr/local/bin:$PATH; export PATH (shの場合) を実行するか .bashrc 等に追加してください。
/usr/local/bin 以外のディレクトリにインストールする場合は, j3w-651/Makefile の INSTALL_DIR=/usr/local/bin を変更して下さい。
Linux以外のUnixの場合もj3w-651/Makefileを変更して下さい。 Makefileの先頭部分で使用するOSに合わせてのコメントをはずして下さい。 例えば FreeBSD では以下のように変更して,gmake して下さい。
# OS = LINUX OS = FREEBSD # OS = AIX # OS = SOLARIS
Linux以外の環境では,十分にテストしていません。
サンプルはコンパイルまたはアセンブル済みの *.j3d が j3d ディレ クトリにありますが、 make sample; make sample_install で j3d ディレクトリに新たに作成されます。個々のサンプルファイルを試す 場合は各ディレクトリの Makefile を参考にしてください。
アンインストールは,j3w651.tar.gzを展開したディレクトリと, デフォルトで make install した場合は,/usr/local/bin/ にある j3cc, j3, j3c, j3dasm, j3w, j3opt.pl の6つのファイルを削除して ください。
list2.j3cというソースファイルをコンパイルして実行するまでを解説 します。
bash$ j3c list2.j3c bash$ j3dasm list2.j3m
で list2.j3m は list2.j3d へアセンブルされます。
bash$ j3w list2.j3d
で実行されます。 j3ccというシェルプログラムが用意されています。 コンパイルとアセンブルを同時に行ないたい場合は次のように指定します。
bash$ j3cc list2.j3c
これで list2.j3m と list2.j3d が生成されます。 更に,コンパイルと アセンブル,j3w の実行まで行ないたい場合は
bash$ j3cc -r list2.j3c
とすると j3w list2.j3d の実行まで自動的に行われます。 実際にj3cの ソースを直接実行できるような環境となります。
j3cのソースに構文エラーがある場合,またj3dasmのアセンブリソースに エラーがある場合は,エラーを見つけた段階でスクリプトは終了します。
tcl/tk が使用できる環境ならば,GUIでコンパイル,アセンブル,実行が できる j3 を起動します。
Perl が使用できる環境ならば j3opt.pl で j3c の出力ファイル *.j3m を最適化(10-15%)して *.j3o に変換することができます。 j3o という拡張子は,j3m や j3s と同じく j3dasm の入力に使用できます。 j3opt.pl は Perl スクリプトです。 /usr/bin/perl 以外の場所に Perl がインストールされている環境では,j3opt.pl の1行目を変更して下さい。
Xサーバが起動していない場合はここで起動してください。 256色以上でXサーバを起動して(例えば xinit -- -bpp 16 )下さい。 動作しているXサーバの色数で表示品質が決まります。
bash$ cd j3d bash$ j3w pose.j3d
でこの場合ポーズエディタが起動します。 pose.j3dは人体モデルのアニメーションのサンプルです。人体モデルの ポーズを作成してアニメーションとして再生させ,ファイルに保存する事 ができます。 pose.j3dを起動して, 2 を押した後,Mを押してください. サンプルのアニメーションが起動します。 ESCキーで終了します。使用法 の詳細はpose_man.htmlを参照してください.
bash$ j3w flight.j3d
として起動すると, 簡単なフライトシミュレータが実行されます。
実行が始まるとオートパイロットモードとなっています。MキーとESCキー以 外の入力を受け付けない状態になっています。また視点は空中に固定された 位置にあります。Mキーを押してマニュアルモードに変更するとキー操作で きるようになります。Y, U, H, G, J, N, T キーでカメラの位置が変わります. Fキーで位置固定の視点に切り替わります。 カーソルキーと K,L キーで方 向転換,S キーでキャノン発射,ESCキーで終了します。 詳細は flight.j3c を参照してください。 また飛行速度は意識的に遅くしてあります.
実行時にオプションとして -f を指定すると高速で動作しますが、CPUの 負荷が大きくなります(ver.6.44以前のデフォルト動作)。ver.6.45から デフォルトでは、高速なマシンの場合に発生する無駄な描画を抑制すること でCPUの負荷を低くしています。次のように指定すると FPS の値が大きく なることが確認できます。
bash$ j3w -f flight.j3d
vi, muleなどのエディターで作成し、拡張子をj3cとして保存します. ソースファイルの内容に関しては,サンプルファイル,または, html/index.html を参考にしてください。
日本語はテキストウインドウに対してのみ可能です。漢字コードは ソースファイル(j3c, j3s)で使用したコードがそのまま出力されます。
ソース(*.j3s)もオブジェクトファイル(*.j3d)も Unix形式の テキストファイル(改行コード0x0A)である必要があります。 Windows環境で作成したファイルは
fromdos <file >file2
または
perl -i~ -pe 'tr/\r//d' file
などのコマンドで改行コードを変換する必要があります。
ウィンドウマネージャで強制終了をした場合などでターミナル画面 に戻った場合にキー入力が受け付けられないように見える場合があ ります。
この場合はエンターキーを押した後に、画面上で見えなくても
j3w[エンター]
と入力して、引数なしで j3w を起動して下さい。
bash$ j3w J3W ver.6.51 2012 Jun Mizutani usage : j3w [-f] file
を表示した後に正常に戻ります。
Ubuntu 12.04, Debian wheezy で動作確認。
blender (https://www.blender3d.org/)は3Dのモデリング、 レンダリング、アニメーションが可能な フリー(オープンソース)の高機能3Dグラフィックツールですが、 Python を使って3D データを好きなフォーマットに変換して出力することもできます。 blenderのメッシュをJ3Cのソースコードに変換し、j3wを実行する J3C Exporter を同梱しています。blender 2.37a と blender 2.40 で動作確認しました。
j3w を展開したディレクトリが、例えば /home/jun/j3w-651 の場合、 環境変数 J3WBLEND を /home/jun/j3w-651/blender と設定します。 環境変数 J3WBLEND は J3Cのソースコードの出力先を 指定します。 直接 j3w を実行する場合は blendview.j3c が存在するパスである必要があります。
J3C Exporter 内でも指定できますが、何度も実行する場合は面倒なので J3WBLEND を j3w を展開したディレクトリ直下の blender に設定しておいてください。
.bashrc などに以下の行を追加しておくと毎回設定しなくてすみます。
export J3WBLEND=/home/jun/j3w-651/blender
j3w-651/blender/j3cExporter.py を blender のスクリプトがおいてあるディレクトリ (私の場合/usr/local/blender-2.40-linux-glibc2.3.6-i386/.blender/scripts) に コピーしてください。
または、blender を起動して最上部のメインメニューの下端を下方向にドラッグ するとボタンが現れます。右端の「File Paths」ボタンを押して左から2番目下の Python: に /home/jun/j3w-651/blender を設定します。 Pythonのパスを設定したすぐ右側のボタン (マウスポインタをボタンにおいて しばらくすると「Re-evaluate scripts registration in menus」と表示されます) をクリックします。この場合は blender 付属のスクリプトがメニューから選べなく なります。
メニューのFile/Exportから 「J3C code (.j3c)」を選択するとダイアログが表示 されます。Factor スライダ(クリックで数値入力、左右にドラッグで数値変更)で オブジェクトの拡大率が変更できます。 各座標軸の最大最小値とサイズが表示されます。 滑らかな(面と面の角度の差が小さい)物体は、サイズを1000以上にしてください。 サイズが大きいほど滑らかに表示されます。
Distance スライダで視点の位置を指定します。 Distance の値をサイズの 2倍程度 に設定して「Run J3W」ボタンをクリックすると モデルデータが blend.j3c に 出力され、blendview.j3c とともにコンパイル、アセンブルされて blendview.j3d が j3w により起動されます。個々のオブジェクトは Head回転していますが、 出力時の設定(Bank,Pitch,Headボタン)で回転方向を変更できます。起動された blendview.j3d は画面に表示されたキーを入力することにより、さらにリアルタイムに操作できます。
J3Wのバージョン番号は以下の規則とします.
J3W ver.4.xy Windows95/98/NTで動作するもの. J3W ver.5.xy Windows95 + DirectX3以降またはWindows98で動作するもの. J3W ver.6.xy Linux + X11R6で動作するもの. J3W ver.7.xy Linux + X11R6 + Mesa(or OpenGL)で動作するもの。(未公開)
x が同じ場合は,ほぼ同等な機能を有するものとします. y はプラットホーム依存のマイナーバージョン.
2008/07/27 現在公開している j3w のバージョン番号
j3w ver.4.51 | Windows95/98/XPで動作するもの。 |
j3w ver.5.60 | WindowsXP SP2以降 Vistaで動作するDirectX9版。 |
j3w ver.6.51 | Linux + X11R6で動作するもの。 |
このソフトはフリーソフトウェアです。GNU General Pulic Licenceにしたがって 自由に使用,配布,改変して頂いてかまいません。 GNU General Pulic Licence の詳細はCOPYINGを参照して下さい. GNU General Pulic Licence の日本語訳は gpl.text です.
義務ではありませんが,ネットへの転載,書籍への収載時には、事後でもかまいま せんのでメールにてご連絡くださるとウレシイです。
このソフトウェアおよびマニュアル,サンプルファイルの著作権は私 (水谷 純, mizutani.jun@nifty.ne.jp)が保有しています。
本ソフトウェアによって生じた損害について著作者は責任を負いません。 また、著作者はバージョンアップの義務を負いません。
本ソフトウェアに関して,著作者にはいかなる種類のサポートの義務はあり ません. すべてにお答えできると限りませんが,対応できる限り,質問などのメール に返答させていただいております. 最新情報は https://www.mztn.org/を参考にしてください. バグ報告も歓迎いたします.
Linux Japanに連載 (9回) した J3W の解説記事本文の PDF と記事中の リストのアーカイブを https://www.mztn.org/lj_code/index.html に置いています。記事全文がPDFでダウンロードできます。
水谷 純(mizutani.jun@nifty.ne.jp)