2001年7月09日更新 関谷トップページへ CG2001 トップページへ  

図形処理・計算処理実習2001 No.12 Javaでのグラフィックス(7)中山第10章 Java3D

1. 前回のJavaグラフィックス(6)の復習とコメント

 第9回から、テキストのJavaプログラムでの例題のファイル(サーバにコピーしたもの)を紹介した。index.htmlファイルで目次ページになっているので、Javaでの実行画面例とjavaソースリストが見れる。今回まで、これを参照しながら、学習していく。

第8章 Java2D

 Java2Dとは、AWTの機能を向上させて、とくにグラフィックスやテキスト、画像を、より効果的に表現し、2Dグラフィックスや2Dイメージ操作を向上させたもので、Java2のコアAPIに組み込まれている。

 サンプルのプログラムの動作を確認したら、ソースプログラムを改造して、タイトル(プログラム名や作成者名,年月日など)を表示したり、ファイル名を表示したりして、何をどうしているのかを説明するものを追加すること。

 Iドライブ(ファイルサーバ)の\Archives\java2igpフォルダに、G1.javaからG23.javaまでの例(およびclass)を見て実行すると共に、それらを参考にして改造・appletへの変更を行う。

前回の実習とWebレポートへのコメント

 Java2Dのプログラム機能とその構造を考察すること。(アフィン変換など、便利に使える)
 そして、第8章のJavaプログラムの改造をする。あるいは、逆の順序でも良いが。

 アプリケーションからアプレットプログラムへの変換は、少し,面倒ではあるが、慣れて欲しい。
(アプリケーションとアプレットとを共用にしなければ、簡単になる。)

 皆さんのWebページを見ると、G6グラデーション、G14回転/移動、G19透明度の変化、G20モーフィング、G23画像のフィルタ処理などがあった。なお、G12は、既に小生がApplet化していたので、単に、そのプログラムの解析などの考察が必須である。

 

2.今日の学習-Javaでのグラフィックス(7) 第10章 Java3D

 Java3Dは、3次元グラフィックスや3次元アプレット、3次元ロゴを作成し、仮想空間を構築するためのAPIである。  Java2DはJava2のコアAPIに組み込まれていたが、Java3Dは拡張APIとして提供されている。

(注)Java3Dの実行環境,マニュアル、例題など

 (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の使い方は、必要なJava3Dの仕様について日本語での紹介もあり、段階的に説明している。テキストを補足するものとなっている。

10.1 Java3Dとは

10.1.1 Java3Dの特徴

 VRMLに似ているが、Javaでは直接的に制御できる。
 標準的な低水準のAPI(OpenGL, ,Direct3D(とOpenGLの比較), QuickDraw3Dなど)を参考にして、シーン・グラフを基礎とした技術である。シーン・グラフとは、3次元空間での全幾何図形や属性、視点情報(ノードと呼ばれる)を含み、仮想宇宙を完全に記述できるように構成されたデータベースである。Java3Dは、木構造のノードに基づいたシーン・グラフを形成する。

 
開発した会社の日本のWebサイト
インテル株式会社
日本SGI株式会社
Apple Japan
サン・マイクロシステムズ(株)

10.1.2 Java3Dクラスの構成

 シーン・グラフは、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

10.2 はじめてのJava3Dプログラミング

実行の環境

 画面のイメージとソースリストは、ファイルサーバI:\Archivesにあるjava2igpフォルダのJava2index.htmlを開けば、ブラウザで一覧できる。
 同じフォルダにソース(*.java)とバイトコード(*.class)を用意している。アプリケーションプログラムの実行(対話処理)は、java クラス名である。

 同じく、*t.htmlファイルを追加したものがある。これは、Java3Dの例題自体がAppletクラスを派生しているものなので、後述する変更をしたappletとそのクラスファイルを指定したhtmlファイルであり、appletviewerで実行できる。

例GraphicsI1.java、Java3Dで球を描く

MainFrame
Canvas3D
SimpoleUniverse
BranchGroup
Group
SceneGraphObject

10.3 インタラクティブなJava3Dプログラミング

 VRMLのように、マウスで回転、並進、遠近を行う。

10.3.1 マウスによる回転、並進、遠近操作

 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軸方向に移動させるクラス

 マウスで幾何図形を回転させるためには、回転の振舞いを作用させる変換グループを作成する。

例GraphicsI2.java、インタラクティブなJava3D

 マウスの1ボタン(左)で回転、3ボタン(右)で並進、2ボタン(中央の回転ができるホイール-普通は画面のスクロール用)で遠近ができる。ただし、マウスによっては、2ボタンが無いので、そのマウスでは遠近ができない。(2ボタンが無いマウスでは、Altキーを押したままで、1ボタン(左)のドラッグで遠近ができる。これは、Java3Dの使い方   物体を動かす  2. MouseBehaviorによる。)
 GraphicsI2t.java- appletに変えたもの
 GraphicsI2tm.java- appletで、球とコーン(円錐体)に色を付けたもの(色は、10.3.2を参照)

10.3.2 概観を設定した螺旋模様

 Appearanceクラス-レンダリングのノードコンポーネント

java.lang.Object
  |
  +--javax.media.j3d.SceneGraphObject
        |
        +--javax.media.j3d.NodeComponent
              |
              +--javax.media.j3d.Appearance

 Material-材質を設定するノードコンポーネント
 拡散色をRGBで設定する。

例GraphicsI3.java、螺旋模様の遠近

 マウスの2ボタンのドラッグで遠近操作ができる。ただし、このC301教室のマウスは、中央の2ボタンが無いので、このマウスではAltキーを押したままの1ボタン(左)のドラッグで遠近操作を行える。
 GraphicsI3t.java:appletに変えたもの
 GraphicsI3tr.java:appletで、マウスでの回転と並進を追加したもの

マウスでの回転と並進を追加したもの

3 実習課題とレポート

テキスト10章の解説や参考のWebページを読み、それらにある例題・小生の改造例等を(コンパイルし、)実行してみる。
それらの中で、皆さんの興味を持った例を参考にして、考察を行い、各自の作品を作成しなさい。
 レポートには、それらの中から、各自のWebサイトの図形処理の今回のページにハイパーリンクのこと。なお、今回は,ブラウザでの対話型実行でなく、appletviewerでの画面の貼り付けで良い

注 Appletへの変換と実行

 今回分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使用については、小生が未完。)