1.3 β1 の新機能


Java3D 1.3 β1 の新機能についての概要です。

新機能について / 承認 / 提案 / 戻る / トップページ


新機能について

1.3 β1 の新機能についての概要です。
 
バージョン 1.3 での変更点は少なく、マイナーリリースとなる予定です。
 
原文は Java 3D(TM) API - Current Releases/Specification From Sun に書かれています (英語)。

承認された API

承認された API です。 高い確率で Java3D 1.3 に組みこまれます。
 
新しいレンダリング機能
 
view ごとの物体指定
ViewSpecificGroup クラスが追加されました。 この Group の子ノードは指定された View の元においてのみ見ることができます。
 
背景画像のスケール
Background ノードで画像の伸縮指定を行うことができるようになりました。
 
Background 形状の意味合いの変更
Background ノードに設定する形状 (BranchGroup) の扱いが 以下のように変更されました。 ViewSpecificGroup、OrientedShape3D ノードは含まれてはいけない。 Light、Fog ノードは含んでも良いが、 その影響範囲は外部のノードには及ぼさず、 また BranchGroup 内部全体に行き届くこと。 上記制約を違反した場合は IllegalSceneGraphException 例外が投げられる。 picking、collision はこれらノードは扱わない。
 
Behavior の同期
Behavior にその動作間隔を取得・設定するメソッドが追加されました。
 
大きさ固定の OrientedShape3D
OrientedShape3D クラスに大きさを固定する (透視投影に影響されない) 機能が追加されました。
 
順番指定可能な OrderedGroup
OrderedGroup クラスで、その子ノードの処理順を 自由に指定することができるようになりました。 これまでは追加順 (インデックス順) 固定でした。
 
新しい幾何・テクスチャ機能
 
Raster の書き込み先オフセット
Raster の書き込み先のピクセルにオフセット値を 指定することができるようになりました。 またそれに伴い、読み込み元のピクセルのオフセット値指定の メソッドの名称が分かりやすく変更されました。
 
テクスチャの LOD 制御
ミップマップを使用したテクスチャの LOD (level-of-detail) の値を細かく制御できるようになりました。 ただし、Java3D の下位の 3D API の実装状況に依存する為、 すべてのプラットフォームで使用可能とは限りません。
 
ImageComponent の更新
ImageComponent の一部を切り出した画像の取得や ImageComponent の書き換えができるようになりました。
 
テクスチャ境界
テクスチャの境界領域の幅の指定、新しい CLAMP 機能の追加がされました。 ただし、Java3D の下位の 3D API の実装状況に依存する為、 すべてのプラットフォームで使用可能とは限りません。
 
テクスチャ合成
テクスチャ合成に様々な式を指定することができるようになりました。 ただし、Java3D の下位の 3D API の実装状況に依存する為、 すべてのプラットフォームで使用可能とは限りません。
 
Cube 環境マッピング
Cube 環境マッピングが可能になりました。 ただし、Java3D の下位の 3D API の実装状況に依存する為、 すべてのプラットフォームで使用可能とは限りません。
 
テクスチャフィルタの追加
テクスチャフィルタの種類が増えました。
 
新しい見掛けの機能
 
透過物体の Depth ソートの切り替え
透過する物体を描画するために、 物体の描画順が Java3D によって制御されていますが、 View オブジェクトでこの描画順の並び替え (Depth ソート) の有無を制御できるようになりました。
 
Material の対象色の指定
ColorInterpolator などで制御の対象となる色の種類 (diffuse、specular など) を指定するメソッドが Material クラスに追加されました。
 
新しい音響機能
 
パラメータの追加
リバーブや環境パラメータが追加されました。
 
その他の新機能
 
Vecmath パッケージの Cloneable 化
Vecmath パッケージに含まれるクラスが全て Cloneable インターフェースを実装し、 clone() メソッドが使用できるようになりました。
 
Alpha クラスの一時停止
Alpha オブジェクトを一時停止させることができるようになりました。
 
グローバルプロパティー
VirtualUniverse クラスにクラスメソッド getProperties() が追加されました。 Java3D の下位の 3D API の実装状況に依存する機能が 現在のプラットフォームで使用可能かどうかを調べる為などに使います。
 
J3DGraphics2D クラスの描画&フラッシュ
J3DGraphics2D クラスに画像の描画と同時にフラッシュを行う メソッドが追加されました。
 
Capability bits の更新頻度
Java3D の最適化のヒントとしてアプリケーションから Capability bits の更新頻度を通知することができるようになりました。 前もって頻繁に Capability bits を頻繁に更新するか どうかを指定しておけば、その情報を使って Java3D が最適化を してくれる可能性があります。
 
きれいになった API
 
Font3D クラスの親クラス
Font3D クラスの親クラスが NodeComponent クラスに変更されました。
 
IllegalSceneGraphException 例外
IllegalSharingException、SceneGraphCycleException などの例外の親クラスとして IllegalSceneGraphException クラスが新設されました。
 
TransformInterpolator クラスの新設
TransformGroup の値を変化させていく Interpolator の親クラスとして TransformInterpolator クラスが新設されました。 このクラスは PathInterpolator クラス、PositionInterpolator クラス、 RotationInterpolator クラス、ScaleInterpolator クラスなどの 親クラスとなり、これら子クラスのメソッドも継承を考慮して 一部名称が変えられました。
 
交差判定メソッド
Shape3D、Morph クラスに PickShape オブジェクトに対しての 交差点への距離を取得するメソッドが追加されました。
 
get メソッドの追加
set メソッドがありながら get メソッドがなかった各クラスのメソッドに、 get メソッドが追加されました。
 
Capability Bit の追加
RenderingAttributes.ALLOW_DEPTH_ENABLE_WRITE、 TexCoordGeneration.ALLOW_PLANE_WRITE の Capability Bit が追加されました。
 
Collection 風味なメソッドの追加
Java3D では SceneGraph を構成するオブジェクトが 他のオブジェクトの集まりへの参照を持っている事が多々あります。 それらに対して、指定したオブジェクトのインデックスを得るメソッド、 指定したオブジェクトを取り除くメソッド、 全てのオブジェクトを取り除くメソッドが追加されました。
 
NodeComponent の共有
immediate mode、背景 SceneGraph、通常の SceneGraph において、 NodeComponent が共有できるように条件が緩和されました。
 
コンパイルされた Group の階層スコープの厳格化
コンパイルされた Group に対して、その保持している 階層スコープの値を変更する際、 capability bit を設定しなくても変更ができてしまっていました。 この点を厳しくする為に RestrictedAccessException 例外が 正しく投げられるようになりました。
 
Sensor Hotspot の意味
Sensor クラスのクラスメソッド setHotspot の意味が これまであいまいだったため、仕様と実装が正しくされました。

提案された API

提案された API です。 未だに実装されていない可能性があります。 The Java Community Process へのフィードバックによって 変更される可能性があります。
 
非互換の変更
 
capability bit の衝突緩和
capability bit の Geometry.ALLOW_INTERSECT と GeometryArray.ALLOW_REF_DATA_READ は同じ値をもっており、GeometryArray クラスは Geometry クラスのサブクラスとなっています。 そのため、両者の capability bit の値を別の値に設定ができない問題を 回避するために、GeometryArray.ALLOW_REF_DATA_READ の値を変更します。 ただしこの場合、古い Java3D でコンパイルされたクラスとのバイナリでの 非互換性を生む問題があります。
 
新しい幾何・テクスチャ機能
 
GeometryStripArray の頂点数
GeometryStripArray と IndexedGeometryStripArray オブジェクトを構築後に 頂点数を調節する機能を追加します。
 
頂点の範囲指定
Geometry 類で使われる頂点の範囲指定ができるようにします。
 
GeometryArray への Tuple オブジェクトの参照渡し
GeometryArray クラスへの Tuple オブジェクトの参照渡しは不便である為、 deprecated とします。
 
IndexedGeometryArray のインデックス範囲チェック
これまでは IndexedGeometryArray へのインデックス設定メソッドで インデックスの範囲チェックを行っていなかった為、 不正なインデックス指定は Java3D のシステムスレッドを 停止させてしまっていました。これを回避するために、 インデックスの範囲チェックを行い、不正なインデックスには ArrayIndexOutOfBoundsException 例外を投げるようにします。
 
インデックスの共有
Java3D の下位 3D API を利用して最大限のパフォーマンスを得る為に、 IndexedGeometryArray で指定するインデックス値を、 頂点・色・法線・テクスチャ座標ごとにではなく、 まとめて同じインデックス値を指定できるようにします。
 
GeometryArray の get メソッド
GeometryArray の get メソッドの引数に頂点数よりも 多い配列が渡された場合、ArrayIndexOutOfBoundsException 例外が投げられていましたが、 これをやめて、ある頂点数分だけ値をコピーするようにします。
 
Morph の変更
他の Geometry クラスの変更に併せて、 Morph の仕様の変更・明文化を行います。
 
Geometry の NIO Buffer のサポート
Java 1.4 から導入された NIO Buffer を Geometry でもサポートします。 読み込み専用のバッファとして J3DBuffer クラスを定義して 使用するようにします。
 
4 次元テクスチャ座標
投影テクスチャとして使用するために、4 次元テクスチャ座標を追加します。
 
きれいになった API
 
Active な ViewPlatform
Behavior のスケジューリングに新たに Active な ViewPlatform の概念を追加します。 WakeupOnViewPlatformEntry などで関連している (Active な) ViewPlatform を取得するメソッドを追加します。

戻る