やさしくわかるJava3D


私が執筆させていただいた書籍のご紹介です。

概要 / 目次 / 誤植 / FAQ / 戻る / トップページ


書籍概要

技術評論社 Software Technology シリーズ
やさしくわかるJava 3D
A5 判/264 ページ/CD 1 枚付属
 
2003年2月7日発売/2709円 (税込)/ISBN4-7741-1669-6
Amazon  BookWeb(紀伊國屋書店)  三省堂書店  丸善  cbook24  ブックサービス  スカイソフト  ジュンク堂書店
 
本書は、Java によって 3D グラフィックを作ることができる、 Java3D の入門書です。簡単な 3D アクションゲームを作っていく過程で、 楽しみながら Java3D の知識を学ぶことができます。 Java の知識を活かして魅力的なプログラムを作ってみたいという人に最適です。

目次

はじめに
第1章 3次元グラフィックスを実現するJava3D
1.1 Java3Dとは
1.2 Java3Dの特徴
1.3 レンダリングモード
1.4 パッケージ構造
第2章 Java3Dのインストール
2.1 Java3Dのバージョン
2.2 必要な環境
2.3 JDK(JRE)のインストール
2.4 Java3Dのインストール
2.5 動作確認
2.6 WebブラウザでJava3Dを動作させるには
第3章 まずは何か作ってみよう
3.1 Hello3D
3.2 シーングラフ
3.3 Canvas3DクラスとSimpleUniverseクラス
3.4 BranchGroupノード
3.5 物体の表示(ColorCube)
3.6 座標系と位置
3.7 TransformGroup
3.8 Transform3Dクラス
3.9 vecmathパッケージ
第4章 箱庭アクションゲーム
4.1 ゲーム概要
4.2 土台作り
4.3 物体の表示(Primitive)
4.4 物体の見かけの設定(Appearance)
4.5 模様を貼る(Texture)
第5章 世界を広げる
5.1 視点と視界
5.2 視点の設定(ViewPlatform)
5.3 視界の設定(View)
5.4 視点の移動(OrbitBehavior)
5.5 影響範囲(Bounds)
5.6 背景(Background)
第6章 物体の定義
6.1 物体とは
6.2 ColorCubeやPrimitiveの正体
6.3 物体の定義(Shape3D,Geometry)
6.4 半透明にする(TransparencyAttributes)
6.5 テクスチャ座標
6.6 同じ方向を見せつづける物体(OrientedShape3D)
第7章 ステータス表示
7.1 平面文字(Text2D)
7.2 視点が動いても変わらない表示(PlatformGeometry)
7.3 多段の座標変換 (TransformGroup)
7.4 Capability bit
7.5 Behaviorの定義
第8章 見栄えをよりよく
8.1 物体に光を当てるには
8.2 光源(Light)
8.3 材質(Material)
8.4 法線情報の設定
8.5 同じ物体を大量に表示(SharedGroup)
8.6 霧効果(Fog)
第9章 動き出す舞台
9.1 アニメーション(Interpolater)
9.2 α値の変化(Alpha)
9.3 環境マッピング(TexCoordGeneration)
9.4 テクスチャと半透明の同時使用
第10章 手触りのある舞台
10.1 ゲームの土台の拡張
10.2 ピッキングと衝突判定
10.3 衝突判定機能(WakeupOnCollisionEntry)
10.4 ノードの除去
10.5 キー入力(WakeupOnAWTEvent)
10.6 ピッキング機能(PickTool)
10.7 視点の自律移動
第11章 ゲームの完成
11.1 メッセージの派手な表示(Text3D)
11.2 キャラクターの表示(Loader)
11.3 陰と影
11.4 SimpleUniverseの正体(VirtualUniverse)
Appendix
Appendix A FAQ
Appendix B クラス一覧
Appendix C 参考文献・サイト
CD-ROMの使い方
おわりに

誤植正誤表

該当箇所
第7章 100ページ number2=number2.substring(number2.length()-4,
  (number2.length()-4,number2.length());
number2=number2.substring(
  number2.length()-4,number2.length());
第7章 105ページ timeCounter.setSchedulingBounds(new BoundingSphere(
  (new Point3d(),Double.POSITIVE_INFINITY));
timeCounter.setSchedulingBounds(new BoundingSphere(
  new Point3d(),Double.POSITIVE_INFINITY));
第9章 143ページ リスト 9.1.2 SampleGame.Java (createTables() メソッド) リスト 9.1.2 StageCarpenter.java (createTables() メソッド)

よくある質問と答え

本書関連で頂いた質問のほとんどがインストールとコンパイルに 関連する内容でした。 お使いの環境に大きく依存するため、全ての方に当てはまるとは限りませんが、 同じところでつまづいている方がいるかも知れませんので、 参考までにここに補足しておきます。
 
コンパイルエラーについては Java FAQ: よくある質問とその回答集 などが参考になるかと思います。 また、コンパイルや実行がうまくいかない場合には、 特定の開発環境で起こる現象も多いため、 一度純正の JDK で実行してみることをお勧めします。
 
なお、本書に関するご質問は出版元である 技術評論社 様までお送り頂いた方が、早く返答が得られると思います。
 
サンプルプログラムが Web ブラウザで動作しない
 
まず、基本的に書籍付属のサンプルは Web ブラウザではなく、 Java SDK 付属のアプレットビュワーでご覧下さい。
 
その理由としましては、Web ブラウザで Java3D を使用したアプレットを 実行するためには、それなりの設定や認証が必要であり、 ブラウザの種類・Java のバージョン・Java3D のバージョンに よってその方法がまちまちであるため、全ての方の環境に対して フォローすることが難しいためです。
 
なぜそのようになっているかと言うと、Java3D のように Java 本体の 機能にないクラスライブラリ、 しかも実行環境側のネイティブ機能を叩く拡張 (Java3D では DirectX や OpenGL など OS に載っている機能を直接呼んでいます) をブラウザで 呼ぶことに関して、以前 Java SDK 側で指針がぶれているようなところが あったためです。
 
これは、Java バイトコードの範疇を越えているネイティブコードを呼ぶ プログラムを、インターネット上の任意のプログラムが叩けてしまうこと、 ユーザーが知らないうちに悪意のあるアプレットで動かされてしまう危険性が あると考えられているためで、セキュリティーポリシーに関わってきます。 この対応のために色々な実現手法が模索された (されている) 経緯があり、 環境に依存した方法が必要となってしまいました。
 
なお、最新版の JRE, Java3D の組み合わせなら特別な設定なしで、 Web ブラウザ上でローカルパス上に置いた Java3D を使用したアプレットが 動作するようです。この時、ローカルパスに日本語が含まれていると 正しく動作しない不具合があるようです。
 
コンパイルしようとすると、解決できないシンボルが多数見つかってしまう
 
javax.media.j3d.* パッケージや、com.sun.j3d.utils.* パッケージなどの クラスに関して全て見つからない旨のエラーが出ているようであれば、 Java3D のインストールに失敗していることになります。
 
Java3D のインストールに失敗している原因として、 一番可能性が高いものとしては、 コンパイルに使用している jdk と違う環境に Java3D をインストールしていることが挙げられます。 Java3D のインストーラがどこの JDK にインストールを行うのか 聞いてきていたと思いますが、 そこの指定を変えてみるとうまくいくかもしれません (使用している javac の場所にインストールするのが正解です)。 このあたりの設定方法は Java3D のバージョンによって異なりますので (書籍は 1.3.0 に基づいて書いています)、 最新版の Java3D を使っているのであれば、 こちら の説明をご覧ください。
 
他には、JDK は管理者がインストールしているのに、 Java3D を一般ユーザーでインストールした場合、 Java3D のファイルが書き込めないためにインストールを失敗している、 などの原因も可能性として考えられます。
 
JDK 1.5 以上でコンパイルできない
 
「リリース 1.5 から 'enum' はキーワードなので識別子として 使用することはできません ('enum' を識別子として使用するには、 -source 1.4 またはそれ以前を試してください)」とのエラーが でていないでしょうか。
 
もしそうなら、これはエラーメッセージのとおりの原因です。 書籍を書いたときの最新の JDK はバージョン 1.4 で、 当時は enum は予約語ではありませんでした。
 
ところが、JDK がバージョン 1.5 になった時に enum が新たに 予約語になったために、コンパイルが通らなくなってしまいました。 JDK 側もこの上位互換性が保てなくなることを認識しているために -source 1.4 (JDK 1.4 の時の予約語や言語機能のみを使う) の オプションを用意していますので、そのオプションをお使いください。
 
サンプルプログラムを 2 度目に実行したときに PC が固まってしまう
 
一度サンプルプログラムを終了した時に、何らかの要因で まだメモリ上に 1 回目に起動した時のデータやアプリケーションが JavaVM 上に残っているのではないかと考えられます。
 
例えば、Windows 側の JavaVM を使っていたり、 グラフィックドライバがテクスチャを持ち続けてしまう不具合が あったりする場合に起きます。
 
純正の JDK の JavaVM で起動し、完全に終了、再度起動して、 同様の現象が起きるか試してみると、原因がどちらにあるか はっきりすると思われます。
 
テクスチャが読み込めない
 
例外が出ているのであれば、上記の問題と同様、 パスに関連する問題であると考えられます。 テクスチャが壊れて描画されるのであれば、グラフィックボードの ドライバの問題となります。
 
第10章以降のサンプルプログラムのコンパイルでエラーがでる
 
第9章以前のサンプルプログラムはコンパイルできるのに、 同じ方法で第10章以降のサンプルプログラムのコンパイルができないので あれば、内部クラスがコンパイルできていない可能性があります。
 
お使いのコンパイラや開発ツールが内部クラスに対応しているか、 その内部クラスの扱いがマニュアルどおりに出来ているかご確認ください。 それでも無理なようであれば、最新の JDK を使用するか、 ソースファイルを書き換えて、内部クラスを通常の外部のクラスに 変えてしまう方法も有効ではないかと思います。
 
第11章以降のサンプルプログラムのはにわが表示されない
 
コンソール等に例外が出ていると思われます。 その例外を見ればある程度原因が分かるかと思います。 cv97r140 のインストールに失敗している場合、エラーが発生し、 アプレットはその時点で停止してしまいます。 例外が発生している場合、はにわの読み込みに失敗しています。 haniwa.wrl が正しい場所に置かれているかご確認ください。
 
CD-ROM からアプレットを実行した場合には読み込めて、 ローカルにコピーすると読み込めなくなるのであれば、 恐らく new URL(getCodeBase(),"haniwa.wrl") で生成される はにわのモデルデータのパスが上手く作れていないと考えられます。 Windows でデスクトップ等にコピーした場合には特に注意が必要です (デスクトップのパスには空白や日本語が含まれるためです)。 以後は環境に大きく依存し、 Java と OS のパスの扱いの問題となるため、 ネット上でその関連のページ等を調べることをお勧めします。

戻る