第9回から、テキストのJavaプログラムでの例題のファイル(サーバにコピーしたもの)を紹介した。index.htmlファイルで目次ページになっているので、Javaでの実行画面例とjavaソースリストが見れる。今回まで、これを参照しながら、学習していく。
Java2Dとは、AWTの機能を向上させて、とくにグラフィックスやテキスト、画像を、より効果的に表現し、2Dグラフィックスや2Dイメージ操作を向上させたもので、Java2のコアAPIに組み込まれている。
サンプルのプログラムの動作を確認したら、ソースプログラムを改造して、タイトル(プログラム名や作成者名,年月日など)を表示したり、ファイル名を表示したりして、何をどうしているのかを説明するものを追加すること。
Iドライブ(ファイルサーバ)の\Archives\java2igpフォルダに、G1.javaからG23.javaまでの例(およびclass)を見て実行すると共に、それらを参考にして改造・appletへの変更を行う。
Java2Dのプログラム機能とその構造を考察すること。(アフィン変換など、便利に使える)
そして、第8章のJavaプログラムの改造をする。あるいは、逆の順序でも良いが。
アプリケーションからアプレットプログラムへの変換は、少し,面倒ではあるが、慣れて欲しい。
(アプリケーションとアプレットとを共用にしなければ、簡単になる。)
皆さんのWebページを見ると、G6グラデーション、G14回転/移動、G19透明度の変化、G20モーフィング、G23画像のフィルタ処理などがあった。なお、G12は、既に小生がApplet化していたので、単に、そのプログラムの解析などの考察が必須である。
Java3Dは、3次元グラフィックスや3次元アプレット、3次元ロゴを作成し、仮想空間を構築するためのAPIである。 Java2DはJava2のコアAPIに組み込まれていたが、Java3Dは拡張APIとして提供されている。
(Java 3DTM 1.2 API )Java3DのWindows98版java3d1.2をダウンロードして、ファイルサーバのIドライブのArchives\Java3Dフォルダにコピーしている。それの自己解凍を同じくI:\archives\jdk1.2フォルダにしている。ここの環境を使って、コンパイル・実行を行う。
英文の資料は、解凍後のものをI;\Archives\Java3D\java3d-1_2-doc_html\index.htmlから、参照できる。
テキストの例題を、この環境を使って、コンパイルjavac済みのGraphicsI?.classファイルを、I:Archive\java2igpフォルダにコピーしている。従って、I:\archives\jdk1.2へのpathを設定すれば、Java3Dのアプリケーションが実行javaできる。
アプレットに変換したものもコピーしている。同じpathで、appletviewerによるappletが正常に動作する。しかし、ブラウザでは、そのままでは動かない。ブラウザのJava Plug-inを使うようにhtmlファイルを変換したりする必要がある。詳細はJavaTM Runtime Environmentおよび Java Plug-inのダウンロードなどを参照のこと。
Java3Dの使い方は、必要なJava3Dの仕様について日本語での紹介もあり、段階的に説明している。テキストを補足するものとなっている。
VRMLに似ているが、Javaでは直接的に制御できる。
標準的な低水準のAPI(OpenGL, ,Direct3D(とOpenGLの比較), QuickDraw3Dなど)を参考にして、シーン・グラフを基礎とした技術である。シーン・グラフとは、3次元空間での全幾何図形や属性、視点情報(ノードと呼ばれる)を含み、仮想宇宙を完全に記述できるように構成されたデータベースである。Java3Dは、木構造のノードに基づいたシーン・グラフを形成する。
開発した会社の日本のWebサイト インテル株式会社 日本SGI株式会社 Apple Japan サン・マイクロシステムズ(株)
シーン・グラフは、VirturalUniverseオブジェクトとLocaleオブジェクト、サブ・グラフから成り立つ。
(1)SceenGraphObject(全シーングラフに共通したスーパークラス): 幾何図形や外観属性などを含む。 ・Node :GroupノードやLeafノードのスーパークラス ・NodeComponet :幾何図形や外観、材質などのノード属性を表す (2)Group グループノード(シーングラフ構造の基本単位と考えられ、幾何図形や属性を含む) ・BranchGroup ・TransformGroup ・Primitive ・Switch ・SharedGroup ・OrderedGroup (3)Leaf Node 幾何形状をしめすGeometryオブジェクトと、その外観(色やテクスチャー)を示すAppearanceオブジェクトを参照する。 ・Shape3D ・BoundingLeaf ・Backgraound ・Clip ・Fog ・ViewPlatform ・Behavior (4)その他 Canvas3D Transform3D View
画面のイメージとソースリストは、ファイルサーバI:\Archivesにあるjava2igpフォルダのJava2index.htmlを開けば、ブラウザで一覧できる。
同じフォルダにソース(*.java)とバイトコード(*.class)を用意している。アプリケーションプログラムの実行(対話処理)は、java クラス名である。
MainFrame Canvas3D SimpoleUniverse BranchGroup Group SceneGraphObject
VRMLのように、マウスで回転、並進、遠近を行う。
TransformGroupクラス-幾何図形の位置をずらしたり、回転させたり、拡大縮小させるなどの座標変換を含んだグループ・ノード
java.lang.Object | +--javax.media.j3d.SceneGraphObject | +--javax.media.j3d.Node | +--javax.media.j3d.Group | +--javax.media.j3d.TransformGroup
Behavior-図形回転などの振舞いを含むフレームの抽象クラス
MouseBehavior-振舞いをマウスで操作するための基本クラス
MouseRotate-マウスの第1ボタンのドラッグで図形を回転させるクラス
MouseTranslate-マウスの第3ボタンのドラッグで図形をxy平面で並進させるクラス
MouseZoom-マウスの第2ボタンのドラッグで図形をz軸方向に移動させるクラス
マウスで幾何図形を回転させるためには、回転の振舞いを作用させる変換グループを作成する。
マウスの1ボタン(左)で回転、3ボタン(右)で並進、2ボタン(中央の回転ができるホイール-普通は画面のスクロール用)で遠近ができる。ただし、マウスによっては、2ボタンが無いので、そのマウスでは遠近ができない。(2ボタンが無いマウスでは、Altキーを押したままで、1ボタン(左)のドラッグで遠近ができる。これは、Java3Dの使い方 物体を動かす 2. MouseBehaviorによる。)
GraphicsI2t.java- appletに変えたもの
GraphicsI2tm.java- appletで、球とコーン(円錐体)に色を付けたもの(色は、10.3.2を参照)
Appearanceクラス-レンダリングのノードコンポーネント
java.lang.Object | +--javax.media.j3d.SceneGraphObject | +--javax.media.j3d.NodeComponent | +--javax.media.j3d.Appearance
Material-材質を設定するノードコンポーネント
拡散色をRGBで設定する。
マウスの2ボタンのドラッグで遠近操作ができる。ただし、このC301教室のマウスは、中央の2ボタンが無いので、このマウスではAltキーを押したままの1ボタン(左)のドラッグで遠近操作を行える。
GraphicsI3t.java:appletに変えたもの
GraphicsI3tr.java:appletで、マウスでの回転と並進を追加したもの
テキスト10章の解説や参考のWebページを読み、それらにある例題・小生の改造例等を(コンパイルし、)実行してみる。
それらの中で、皆さんの興味を持った例を参考にして、考察を行い、各自の作品を作成しなさい。
レポートには、それらの中から、各自のWebサイトの図形処理の今回のページにハイパーリンクのこと。なお、今回は,ブラウザでの対話型実行でなく、appletviewerでの画面の貼り付けで良い
今回分Java3Dアプリケーションプログラムのappletへの変更は、元々Appletから派生させたクラスGraphicsI?にmain()メソッドを使っているので、そのメソッドmain()を削除し、コンストラクタGraphicsI?()をメソッドpublic void init()に変更することで簡単にできる。
アプレットプログラムの起動は、htmlファイルを作り、appletviewerで実行できる。しかし、ブラウザIE5.0ではエラー(exception:java.lang.ClassNotFoundException:com.sun.j3d.utils.universe.SimpleUniverse)になる。
現在のブラウザでは、前述したようにサンのPlug-inを使う必要があり、htmlの変換とJREのインストールが必要である。(ブラウザのPlug-in使用については、小生が未完。)