title Acerola3D ChangeLog

2010,04/14
========================================

Skeleton.getMotionLength()を追加。

2010,04/13
========================================

BVHの回転のチャンネルの順番がZ,X,Yでない物も多数ある
ということに今ごろ気がついた。Z,X,Yの順番でない場合でも
きちんと読み込めるように対応した。ついでに回転以外の
変換の順番もBVHのチャンネルの宣言どうりの順番で適用する
ようにしてある。問題ないとは思うが気をつけておくこと。

なんか非常にカクカクしてしまうBVHもあったような気がするが、
今回は気がつかなかった。TimerBehaviorのデフォルトの
インターバルを変更したからだろうか?

2010,04/08
========================================

あれ?2009,12/07に改良したRZipURLConnectionの
キャッシュがまったく働いていなかった。働いていない
だけでなく改悪になってた。一行追加して修正。
やっぱり実際に実行して確認しないとダメだね．
ということでa3testパッケージにRZipCacheTestという
debug用プログラムを作成してテストしてみた．
3回の平均値と不偏分散．

* Var.A: 2009,12/07以前の実装
* Var.B: 2009,12/07の改悪後
* Var.C: 2010,04/08の修正後

* <http://acerola3d.sourceforge.jp/samples/a3/axis.a3>
    + Var.A: 平均  0.08秒，分散 0.00， 差 0.09
    + Var.B: 平均  0.08秒，分散 0.00， 差 0.08
    + Var.C: 平均  0.06秒，分散 0.00， 差 0.09
* <http://acerola3d.sourceforge.jp/samples/a3/vesma9.a3>
    + Var.A: 平均  2.54秒，分散 0.00， 差 0.48
    + Var.B: 平均  2.68秒，分散 0.00， 差 0.60
    + Var.C: 平均  0.53秒，分散 0.00， 差 0.63
* <http://acerola3d.sourceforge.jp/samples/a3/ExpAtCE.a3>
    + Var.A: 平均 11.17秒，分散 0.00， 差 0.27
    + Var.B: 平均 38.21秒，分散 0.05， 差 0.67
    + Var.C: 平均  1.78秒，分散 0.00， 差 0.58
* <x-res:///vesma9.a3>
    + Var.A: 平均  1.64秒，分散 0.01， 差 0.51
    + Var.B: 平均  1.79秒，分散 0.00， 差 0.56
    + Var.C: 平均  0.53秒，分散 0.00， 差 0.52

実際には4回ロードして1回目は捨てて2,3,4回目の数値で計算している。
というのも1回目の数値はあきらかに長いので何かの初期化で時間を消費して
いるのだと思う。大学の学内LAN上での数値なのでファイアウォールの
キャッシュが効いてるはずだけど、何回やっても同じだけ差が出るので
キャッシュじゃないはず。自分でも何の初期化かは不明。「差」という数値は
平均と1回目の差。でも、デカいファイルのネットワーク経由でのロードでの
効果が絶大だということが確認できた。ローカルでも内部要素の多いファイルでは
かなり効果がある。とりあえず良しとするか。

2010,04/01
========================================

このライブラリ自体はまったく変更していないけど、この
ライブラリに依存するJava3DとかJOALとかのライブラリを
整理したので、ここにメモしておく。

まず、64ビットOSに対応できてなかったのでWindowsと
Linuxに64ビット版のバイナリを用意することにした
(MacOSXはユニバーサルバイナリなので最初から64ビット
対応済み)。ただ、自分で対応しないといけないのはJOAL
のみで他のJava3Dとかはamd64対応のバイナリがあるので、
それを利用。WindowsもLinuxもVirtualBoxで、64ビット
OS環境を用意してJOALをビルドした。WindowsはWindows7
の64ビット版、LinuxはUbuntu9.10の64ビット版を使用。

Linuxの方は特段変なことはしなくても良くてほぼJOALの
README.txtどうりにビルドできた。VirtualBox環境では
雑音やテンポの遅れの問題があったけど使える物にはなって
いるので深追いしてない(VirtualBoxの方の問題じゃない
かなぁ)。

WindowsはそのままビルドするとVisual C++ランタイムに
依存するDLLが作成されてしまう(しかもランタイム入れて実行
してもなぜか動作しない)。antのビルド時のログを見ると「/MD」
というスイッチ付きでDLLがコンパイルされているのが原因の
ようだった。このへんはgluegenの設定で何かできるのかも
しれないけどまったくわからずで、結局antのビルド時のログを
参照して「/MD」の部分を「/MT」に変更してコマンドプロンプトから
直接コンパイルし、DLLを作成した。関係ないけどWindowsで
64ビット版バイナリを作成するには色々と必要なことがあって
勉強させてもらった。

それからJava Web Startのバイナリパッケージを見直そうと
思ってろいろ調べてみたら、Java3Dのサイトで公開されている
各種OS用のバイナリパッケージに含まれるjarファイルが全て
同じ物であることに気がついた。さらに調べてみるとJava3Dの
build.xmlにはshared jarなる物をビルドするためのタスクが
存在することを発見した。つまり全てのOSで共有できるJARファイルが
作成可能ということ。そこで以前作成したj3dcore.jar
からZバッファ読み出しのパッチを当てて作成したGraphicsContext3D.class
を抽出してJava3Dのウェブサイトで公開されているバイナリパッケージの
GraphicsContext3D.classだけを交換したj3dcore.jar
ファイルを作成した(当然j3dcore.jarのSUNによる電子署名の情報も
削除)。かなり強引だけど、これが上手く動いたのでこれを使うことにした。

調子にのってJOGLやJOALも同じ共通のJARファイルで実行してみたところ
全て上手くいったのでダイナミックリンクライブラリ以外の全てを共通化
することに成功。これのおかげでJava Web Startのバイナリパッケージの
単純化と大幅な容量削減に成功した。

2010,03/12
========================================

Java Web Start,Windows,MacOSX,Linuxのそれぞれの
バイナリパッケージも簡単に作れるようにbuild.xmlを
工夫してみた。

2010,03/11
========================================

exampleに入っていたテスト用のプログラムを
別パッケージ(a3test)に移動して削除しました。

2010,03/09
========================================

物理エンジンのjbulletを組み込めるように準備だけした。

2010,03/01
========================================

一応、四元数とかオイラー角とか回転行列関係のリファクタリング
終了。バグが無いか引き続きチェック。

A3BehaviorのsetLocImmediatelyなどのメソッドで、
Behavior外のスレッドからの呼び出しでTransformGroupを
書き換えていたが、これをしないように改良した。

それとTimerBehaviorのデフォルトのインターバルを100ミリ秒
から33ミリ秒に変更した。これによってA3BehaviorとCameraBehaviorの
補間スピードが速くなってしまったので、ちゃんとelapsedTimeを
考慮した補間計算にした。その時に1秒で行われる補間の率をそれぞれの
Behaviorで持つようにしたので、A3ObjectとA3CanvasInterfaceに
これを変更するAPIを付けた。同様の理由でWalkControllerとFlyController
もTimerBehaviorのインターバル(実際にはA3VirtualUniverseのelapsedTime)
と同じになるようにした(同期まではしていない)。

さらに、これにあわせてActionBehaviorもTimerBehaviorと
同期するように変更した。

2010,02/24
========================================

A3UtilクラスをUtilにリネーム。そして
このクラスに四元数やオイラー角の計算のための
メソッドを追加した。でもまだデバッグ中。
これができたらA3Object.getRot()を実装して、
計算の重複しているところをリファクタリング
してゆこう。

2010,02/23
========================================

BVHデータを表示するためのSkeletonクラスの表示を
改善した。理由はA3EditorでBVHをドラッグできるように、
骨に太さを持たせるため。

2010,02/19
========================================

02/09に追加したポリゴン表示と強調表示の機能をA3Objectの
標準の機能に格上げした。よってPolygonizerクラスと
Emphasizerクラスは廃止した。

さらに、いまさらだけど、A3ObjectをA3CanvasInterfaceに
addした時にA3Objectのシーングラフをcompileするようにした。
Action3Dの方にはcompileしてもsetShapeが上手く動作
するように余計なBranchGroupを追加して対応した。
これでパフォーマンスがどうなるかな?

2010,02/12
========================================

A3CanvasInterfaceにFPS(Frame Per Second)を取得する
ためのメソッドを追加した。でも、A3WidgetのFPSだけは、
たぶん正しい値が取得できていない。

それと、TimerBehaviorのelapsedTimeを各A3VirtualUniverseごとに
設定するためのメソッドもA3CanvasInterfaceに追加した。
これは、カメラやA3Objectの座標などの更新インターバルに相当する。
今まで、100ミリ秒決め打ちでやってきたので、結果10FPSの3DCGにしか
なっていなかった。ただ、この更新インターバルはBehaviorの更新インターバル
というだけなので、負荷が高い時などは必ずしも「FPS=1000ms/更新インターバル」
とはならないので注意。

2010,02/09
========================================

ポリゴン表示機能を追加。ちょっと使い方が直感的じゃないけど、
たぶんJava3D的に負荷が少なくAcerola3D的にAPIの変更の必要が
無い方法で実装してみた。負荷が少ないならA3ObjectのAPIを追加する
ことでA3Objectのデフォルトの機能にしても良いけど、わからないので
とりあえずこの方法にしておく。

強調表示機能を追加。去年の12月8日、A3Objectに
setSelected3D()の機能を付けたけど、こっちの方が良かった
かなぁ？実現方法は上のポリゴン表示方法と同じなので、
上と同様なことが言える。

2010,02/05
========================================

サウンドの音量調節のためのAPIをA3CanvasInterfaceと
Action3Dに追加。A3CanvasInterfaceは全体の音量。
Action3Dの方はアクションごとに音量調整できるように
してある。ただ、OpenALの実装で1.0以上の音量設定に
違いが出るかも。

2010,01/29
========================================

A3SubCanvas,JA3SubCanvasの実装をひととおり完成させた。
A3CanvasInterfaceをどうするか非常に迷ったけど、結局
そのまま使って、A3SubCanva,JA3SubCanvasもA3CanvasInterfaceを
実装させることにした。これは、互換性のためであって、
ベストな方法ではないので、特にA3SubCanvas,JA3SubCanvasに
大量のダミーのメソッドが必要になった。

これの本来の解決法はTODO.txtの方で考察している。やっぱり、
Version3系列は考えとかないといけないかもしれない。

2010,01/26
========================================

A3SubCanvas,JA3SubCanvasの機能を充実させているところ。
まだ途中。でも、だいぶ実装が汚くなってきているので、
なんとかしたい。

2010,01/18
========================================

大変申し分けない。
Acerola3Dフォーマットの<a>タグ、<p>タグのrot属性
で指定する回転の適用順番を変更しました。そして
A3Object.setRot()やA3CanvasInterface.setCameraRot()
などの回転の適用順番も同様に変更しました。これは仕様の
重要な変更になってしまうのですが、傷が浅いうちに変更して
おきます。具体的には回転の適用がZ,Y,Xだったのを
Z,X,Yの順番に変更しています。この順番は、オライリーの
「ゲーム3D数学」という本で最も実用的で広く使われていると
書かれている順番で、確かに実用的だと思う。XとYの順番が
入れかわっているわけだが、実際XとYの両方の回転を指定する
ような場面はめったになかったため、それほど大きなダメージは
無いと思うが、とにかく重要な仕様変更になってしまった。

2010,01/15
========================================

投影法として、デフォルトの透視投影以外に、平行投影
が選択できるようになった。透視投影では画角(FieldOfView)、
平行投影では物理座標系でのCanvasの大きさ(幅)が、
設定できるようになった。これらの機能へのアクセスは、
A3CanvasInterfaceとA3SubCanvasInterfaceの、
setProjectionMode(),setCanvasWidthInPWorld(),
setFieldOfView()の三つのメソッドを使う。

この変更に対応するために、座標変換のメソッドに
拡張をほどこしている。ピッキングなどで影響ないか
気をつけておくこと。

それとA3SubCanvasInterfaceの実装(A3SubCanvasと
JA3SubCanvas)を完成させた。
(2010,01/29:A3SubCanvasInterfaceは廃止)

2010,01/12
========================================

A3SubCanvasInterfaceというのを新しく導入して、
既存の仮想空間に、別の視点からの描画を可能にする
キャンバスをバインドできるようにした。
(2010,01/29:A3SubCanvasInterfaceは廃止)

2010,01/11
========================================

VRMLクラスにキャッシュをクリアするメソッドを追加。
A3CanvasInterfaceにgetCanvasSize()を追加。
A3CanvasInterfaceとA23そして新しいクラスA3Utilに
cleanUp()インターフェースを付けたけど未実装。

2010,01/08
========================================

一部の環境でMP3,OGGの再生が早送りやレコードの音飛びの
ような感じになってしまう。新しい音声再生の機構と、JOALMixer
が何かバッティングをおこしている感じがする。なので、とりあえず
Java3DのサウンドミキサーのデフォルトをJOALMixer2から
JavaSoundMixerに変更することにした。

2010,01/07
========================================

A3CanvasInterface.delAll()がシーン対応になって
なかったので、対応させた。

2010,01/04
========================================

a3-vrml97のBackgroundのテクスチャ画像の貼り付け方
が微妙に違ってたので修正．具体的にはtopの画像が
180度回転する必要があった．これでスカイボックスが
綺麗に表示できるようになった．

2009,12/25
========================================

CATALOG.XMLの<a>タグと<p>タグで指定される
scale,rot,offset属性で指定される座標変換処理を
良く見直したらバグ発見。変換はscale,rot,offsetの
順で行われるように変更したのと、rotに関してはz,y,xの
順で変換されるものとする。これをフォーマットの仕様書にも
反映させた。

2009,12/25
========================================

Action3Dの効果音をJOALに直接アクセスして再生
するように変更した。これでMP3などの再生にも
対応したし、今のところ非常に調子がよいようだ。
しかし、Java3DのAudioDeviceと共存させているので、
非常にコードが汚くなった。おりを見てリファクタリング
すべし。

それから，先日廃止した<s>要素のloop属性だが，
BGMをループ再生するのに必要だったので復活させる．

2009,12/21
========================================

CATALOG.XMLで、サウンドを設定する<s>要素の
loop属性を廃止することにした。かわりにアクション
(<a>要素)のloop属性で設定する。

2009,12/20
========================================

Action3D.getActionNo()とAction3D.getActionName()が
実装されてなかったので実装した．

A3CanvasInterface.setA3Controller()の引数に
nullを与えてやれば，コントローラのリセットが
できるように修正した．

2009,12/19
========================================

多分うまくいっていると思うのだが、Acerola3D
ライブラリに広告を付ける機能を追加した。
Acerola3DライブラリをJava Web Startで配備する
時のjnlpファイルでJavaのシステムプロパティーとして
「acerola3d.advertisement=クラス名」と言う形で、
Component2Dを拡張したクラスを指定して、実際その
クラスを含むjarファイルも一緒にアップロードすれば、
そのComponent2Dは常に最前面に描画される。
Component2Dの拡張クラスには引数なしのコンストラクタ
がなければならない。

2009,12/08
========================================

A3ObjectにsetSelected3D()とisSelected3D()を
追加して、オブジェクトが選択されていることを3D表示で
表現できるようにした。

A3CanvasInterfaceを実装するクラスに
setCameraLookAtPoint()系列のメソッドを追加した。
A3ObjectにもsetLookAtPoint()系列のメソッドを
追加した。特にA3Objectの方はリファクタリングもした
ので、従来の機能に変化が無いかチェックする必要がある。

2009,12/07
========================================

x-rzip:プロトコルの読み込みの実装のところに、
キャッシュをもうけて読み込みを速くするようにしてみた。
Appletとかでネット経由で読み込む時には特に効果がある
はず。

2009,12/01
========================================

ビルボード機能を追加，A3Object.setEnableBehavior(true);
してからA3Object.setBillboardControl(true);で有効に
なる．それとAcerola3DファイルのCATALOG.XMLのa3タグの
billboard属性でも指定できるようにし、その場合は自動で
ビルボード機能が有効になるようにした。

2009,11/30
========================================

Smiley.a3で、一番最初のフレームがきちんと表示されていない
ことが判明した。たぶん、最初のフレームでBVHの情報が
反映されていないのが原因で、表示位置がずれるのと、
Angryが表示されないという事態に陥っている。
そこで、ActionBehaviorのinitialize()でprocessStimulus()を
呼ぶようにしたらなおったようだ。他に影響がないかチェックするべし。

それから、11/20の変更のせいで、音声の再生がおかしく
なっていた。これもActionBehaviorの修正で対応した。多分
大丈夫だけど、もう一度チェックすべし。

2009,11/20
========================================

JA3Canvasでは大丈夫なのに、A3Canvasで吹き出しの
三角が表示されなかったのを修正。原因不明。
それと再生時間が1フレーム以下のアクションの効果音が
出ていなかったのを修正。

2009,10/27
========================================

SimpleControllerのバグ修正。難しいバグだった。
実は100%理解してないのだが、PickingBehaviorの
physicalCSToVirtualCSで使用している
TransformGroup(変数名vptg)の値は
a3CanvasInterface.setCameraLocImmediately()を
実行してもすぐに反映されるわけではないことに起因している
と思う。別の計算法で逃げたけど、これはどうしたら良い物
だろう？

それに加えてA3CanvasInterface.getCameraUnit*()
メソッドのバグも修正。

2009,10/26
========================================

A3Widgetでキーイベントとマウスイベントが機能して
いなかったのを修正。LinuxとWindowsでは正常に
動作している模様。でもMacOSX上ではマウスドラッグで、
ウィンドウ自身が移動してしまい完璧には動作していない。

デフォルトのナビゲーションスピードを4.0m/sから
1.0m/sに変更。EditControllerのバグ(カメラの
向きが正面でないときの平行移動の方向が変)を
修正。

2009,10/13
========================================

署名無しのアプレットを作ることができるように
AccessController.doPrivilegedWithCombiner
を使ってセキュリティ例外が出ないようにした．
今回対応したのは

* A3VirtualUniverseの中のSystem.getProperty()
* A23の中のURL.setURLStreamHandlerFactory()
* Action3DDataの中のloadCatalog．というか
  その中のJAXBContext.newInstance()

これ以外でも必要なところがあるかどうかはまだ不明．

2009,10/12
========================================

A3Widget一応完成。それとMotionCameraController
というので、モーションキャプチャデータを元にカメラを
自動制御する方法を追加。

2009,10/11
========================================

まだ未完成だけど、A3Widgetを追加。
背景が透明なウィンドウで3Dオブジェクトを
表示できるようになる。

未完成だし、Java3D1.5.2のバグをパッチをあて
て直さないといけない。

* <https://java3d.dev.java.net/issues/show_bug.cgi?id=593>

2009,09/30
========================================

Component2Dをinterfaceからabstractクラスに変更。
仕様の変更になってしまったけれど、カメラの背後にあるはずの
Component2Dが表示されてしまうバグと、Component2Dの奥行が
考慮されて表示されるようになった。また吹き出しの表示を
少し見易く改善した。

Marionetteの情報をMotionオブジェクトから取得して
構築するコンストラクタを追加した。BVHのデフォルト
ポーズの情報でMarionetteの内部情報を構築するメソッドも
追加した。

2009,09/28
========================================

segno(セーニョ),dalsegno(ダルセーニョ)機能を
実装した(詳しくはAcerola3Dフォーマットの仕様書
参照)。ただ、segno前の音声は無理っぽいのであきら
めて、segno後の音声だけに対応している。

2009,09/26
========================================

まだまだ足りないところは多いけど動画を表示させる
ためのA3Videoを作成した。ソースのほとんどはJMF
のサンプルから拝借している。JMFを使っているので、
jmf.jarの設定が必要。

2009,09/24
========================================

3次元座標の上方向をY軸にするかZ軸にするかとかの話。

デフォルトはY軸が上。このデフォルトの変更を
A23.setDefaultUpperDirection()で行えるようにした。
新しいSceneが生成される時に、このデフォルト値が
Sceneにコピーされ、この値を元に、カメラの位置と
回転が初期化される。そしてこのシーンにaddされる
A3Objectは自動的に回転されて正常な向きになるように
表示される。

A3ObjectにあったupperDirection変数は廃止となり、
かわりにupperVectorが新設された。これは
オートコントロールの正面自動計算の機能で使われる
上方向ベクトルでA3Objectオブジェクトごとに保存する
こととなった。setUpperVector()メソッドなどで
アクセスする。

でも、まだ全然テストがすんでいない。十分にテストすること。

2009,09/20
========================================

吹き出しとラベルの表示とAPIを大幅に変更した。
でも、これで良くなったと思う。

2009,09/18
========================================

Acerola3Dファイルから各種メタデータを取り出せる
ようにした。そしてAcerola3Dファイルの省略形として
動きの無いアクションでBVHファイルを省略できるように
した。まだ、上手く音声が再生されないようだがConeSoundの
効果音にも対応した。

2009,09/17
========================================

A3Object.getSpeed()の返す値が間違っていたのを
修正。そしてオートアクションコントロールの動作も
少し修正してA3Autoのサンプルが正常に動作するように
した。

2009,09/14
========================================

Action3DのsetMotion()を実際に動くようにした。
サンプルファイルはOverwriteMotion.java。
Marionetteを動くようにした。サンプルファイルは
MarionetteTest.java。Action3DのsetShape()を
実際動くようにした。サンプルファイルはOverwriteShape.java。
ただsetShape()が上手く動作するには条件がある。詳しくは
サンプルを参照。

2009,09/07
========================================

PickingBehaviorの中でやっている座標変換のバグ修正。
Transform3Dのtransformメソッドの変換は、引数が
Point3dの時とVector3dの時では異なる動作をする
という所がポイントだった。その他座標変換のいろいろな
細かいバグは多数あった。これにしたがいpickingの
コードも修正。そしてA3Objectに新たな属性を加えて
ピッキングできないオブジェクトを来ることができるように
した。

それと、なんとなく、マウスのクリックはリリースイベント
時に同じオブジェクトにマウスがのっかっていれば良い
というアルゴリズムに変更してみた。

2009,09/04-2
========================================

カメラに対して常に固定された位置にオブジェクトを表示
するための機能を追加した。A3CanvasInterfaceの
addLockedA3()やdelLockedA3()メソッドから使用する。
この過程でphysicalCSToVirtualCS()などの座標系の変換の
計算が正しいのか疑問が生じたので、確認すべし。

2009,09/04
========================================

Action3DData.javaに手を加えてフォルダからデータを
読み込めるようにした。つまりzip圧縮前のデータの入った
フォルダを指定することで、圧縮しなくても表示の確認が
できるようになった。サンプルはexamples/DirA3.java。

2009,09/03-3
========================================

A3ScreenをJA3Canvasベースにしたら、Windowsでも
動かない環境が出てきた。やっり、安全のために元に
戻すことにする。かわりにComponent2Dをpublicな
インタフェースにして、これをA3CanvasInterfaceに
加えて2D描画ができるようにした。

2009,09/03-2
========================================

A3ScreenをA3CanvasベースからJA3Canvasベースに
変更した。これによってSwingコンポーネントを表示
できるようになった。examplesにサンプルも付けた。
(自分のマシンでA3Screenが動かなくなったけどね。)

2009,09/03
========================================

シーンのためのAPI一応完成．引き続き動作確認を
してゆくこと(アバタと背景のテストはまだ)．

2009,09/02
========================================

シーンの概念を導入してA3CanvasInterfaceに以下の
メソッドを定義して実装した。

* void changeActiveScene(int s);
* void add(A3Object a3,int s);
* void del(A3Object a3,int s);

これ以外にもシーンを指定して処理できると便利な
メソッドなどがあるので、随時追加してゆくべし。

そして、十分にテストするべし。

2009,08/28
========================================

Action3DのVRMLに入っている背景と霧の設定が反映
されるように変更した。デフォルトのj3d-vrml97では
画像を使った背景が反映されなかったので改良して、
これを読めるようにして、a3-vrml97という名前にして
おいた。lib/a3-vrml97.jarに入っている。

2009,08/25
========================================

A3Text3Dというクラスで文字を表示することが
できるようになった．それとA3Screenのディスプレイ
モードの変更の機能の追加と，ショートカットキー
(Ctrl+Alt+C)で強制終了できるようにした．

2009,08/24
========================================

終了処理や解像度の選択など、不足の機能は多数ある
けど、とりあえずA3Screenで全画面表示のプログラムを
簡単に作成できるようにした。

2009,08/14
========================================

A3CanvasInterface.setCameraLoc(0.0,0.0,100.0)とかにすると
かたまるバグをA3VirtualUniverse内のpickingBehavior.setSchedulingBounds()
で設定するBoundingSphereの半径をDouble.MAX_VALUEにして回避
した。なんとなくついでに、他の場所でBoundingSphereを使用して
いる場所でも半径をDouble.MAX_VALUEにしておいた。これは
パフォーマンスの視点では最悪の方法なので
根本的にBoundingSphereの使い方を整理しないといけない．

javax.media.j3d.ViewのsetFrontClipDistanceと
setBackClipDistanceの値を適切に設定して、
ExamControllerとSimpleControllerでは
きちんとカメラのスケールを設定するようにすることで、
拡大、縮小時にオブジェクトが切れてしまうのを回避した。

BoundingSphereとカメラのスケールの扱いは、まだ
考慮すべき点が多数ある。それとナビゲーションのスピードも、
まだ手をつけていないので、どうにかすべし。

2009,08/07
========================================

A3Backgroundで背景のジオメトリを指定する方法が
いまいちわからなかったので、これをあきらめて代わりに
背景画像を指定すると球面に貼り付けて背景として表示する
機能を付けた。ジオメトリを背景に使用する方法としては
VRMLクラスやAction3DクラスをA3Canvasなどの
setBackgroundメソッドで可能なので、とりあえず
これでよしとする。だた、一応ジオメトリをセットするための
メソッドは残しておいたので時間があれば研究してみるべし。

2009,07/19
========================================

Action3DやVRMLでは霧や背景が扱えないことが
判明したのでA3FogクラスとA3Backgroundクラスを
作成してみた。A3Fogは使えなくも無いかもしれないが、
A3Backgroundは背景の色の指定ぐらいにしかつかえなさ
そう。

2009,07/17
========================================

2009,07/10および10-2のテストを行ったけど
たぶん大丈夫だと思う。

2009,07/10-2
========================================

補間が無効のA3ObjectでA3Canvasなどにadd前に
setLocしておき，その後A3Canvasなどにaddした
時の動作は，最初の瞬間からsetLocした場所に
表示されるべきだが，一瞬原点に表示されるという
バグがあった．このバグに対処した．

A3Canvasにaddする前にchangeImmediatelyしたて
おいたAction3DオブジェクトがA3Canvasにadd
した瞬間，一瞬だけデフォルトのアクションが
表示されてしまうバグにも対処した．

でも，念のためテストをする必要があると思う．

2009,07/10
========================================

loopしないアクションが、まれに最後のフレームまで進む
前に停止してしまうバグに対処した。たぶん大丈夫だと思う
けど念のためテストをする必要がある。

2009,06/28
========================================

BVHクラスにgetOffset(String bonaName)メソッドを追加。
BVHを表示するためのSkeletonクラスを作成した。

2009,06/27
========================================

BVHの情報を骨として表示する時に必要となるデータを
BVHオブジェクトから取得するgetBoneTailsメソッドを
追加した。BVHの構成上の特性により、一つの骨が一本の
線に対応付けられないので複数の座標を返す点に注意。
(普通の骨なら複数の座標が帰ってきても全て同じ
座標になるが、骨と骨が離れているような構造のBVHの
場合は本当に複数の骨を書かざるをえない状況もありえる。)

2009,06/03
========================================

やはりマニュアルを書くと，いろいろ細かい
バグや変なところが見付かる．修正して
バージョン2.18としてリリースする．

2009,06/02
========================================

 オートコントロールのところのマニュアルを書いていて気が付いた。
 歩行スピードのデフォルト値は1.0m/sということに変更
 (今まで4.0だった)。 それとCATALOG.XMLで
 autoActionControlの指定ができるのは変な感じなので
 廃止することにする。

2009,05/18
========================================

A3CanvasやA3Windowから登録したアバタを追従する
ようにカメラを自動的に制御するChaseControllerを
実装してみた。チェックするべし。最低限の機能しか
実装してないので、作り込みをして使いやすくすること。

2009,05/08
========================================

UpperDirectionの意味を再定義する必要がありました。
具体的にはUpperDirectionを設定する対象が仮想空間
ではなく、各A3Objectに対して設定するようになります。
APIの変更にはなってしまうのですが、モヤモヤが取れた
気がします。

しかし、任意の方向ベクトルを上方向に指定できるような
APIの方が良いだろうし、現在の実装も中途半端な所があります。
ですが、今回は無理せず見送ります。(2009,05/18追記:
これについてはTODO.txtに少しメモした。)

これでやっとlightweightの準備が整ったんで、これから
じっくりテストしてバグを潰すべし。

2009,05/01から07
========================================

やっぱりlightweightにしてswingで使いたいという
要望がまわりから出てきたのでJCanvas3Dに再チャレンジ
することにした。この実装はJA3Canvasというクラス名に
して、従来のA3Canvasはそのまま残すことにすれば
そんなに問題ないかと思ったら、結構大規模な変更が
必要だった。どうしようか迷ったけどNaviModeと
UpperDirectionの列挙型をA3CanvasInterfaceという
クラスに移動したので、その部分だけインタフェースの
変更になると思う。で、しかもまだ途中。

JA3CanvasだけでなくUpperDirectionのテスト用
プログラムを作成するべし。

2009,04/06
========================================

その場しのぎのヘンテコな手を使って
SableCCのバージョンを2.18.2から3.2にむりやり
上げてみる実験をやった。前のように極端に遅くなる現象は
無くなったようだけど、良く考えてみると改善された
項目は一つもなく、実質的に改悪だね。ということで
やっぱり2.18.2を使うことにした．でも，忘れてまた同じ
ことをしないように，sableccの文法ファイルやParserBVH.javaに
ヘンテコなコードをコメントアウトして残しておくことにする．

2008,10/01
========================================

CATALOG.XMLからコメントが読み出せないことが
判明したのでいろいろ試してみたらXML Schemaの記述で
`<c>`要素の宣言を`<a3>`の中から外に出してrefで参照
するようにしたら上手くいった．でも，理由は不明．
さらに，antでコンパイルすれば上手くいくけど，
javacコマンドで手動でコンパイルすると実行時に
ネームスペース関係のエラーが出る．これも原因不明で
非常に不安．でも，待ってられないので強行突破．

2008,09/30
========================================

CATALOG.XMLの読み込み部分の実装をDOMから
JAXBに変更した。この変更による問題が2つ。
1つ目はCATALOG.XMLの記述できちんとnamespace
の宣言をしてやる必要が出てきた。2つ目はJAXB
なので、素のjava5では動かないと思う。

2つ目の問題はともかく、1つめの変更はまた互換性
の無い仕様の変更ということで、これが最後であって欲しい。

2008,09/29
========================================

書き忘れていたのですが，CATALOG.XMLで
プロファイルを記述する専用の場所として`<profile>`要素
を加えました．

2008,09/20
========================================

`<p>`要素に付けるoffsetとrot属性のバグ修正。

2008,09/19
========================================

SimpleControllerを作って、A3Canvas.NaviModeに
SIMPLEを追加。このモードはEXAMモードに似てる。
違いはEXAMモードでは、注視点があるオブジェクトに固定される
けど、SIMPLEモードでは注視点を平行移動できる。

2008,09/10
========================================

defaultActionとかdefaultActionNoという名前の
変数やメソッドがあったが，これを廃止してhaltAction
とかhaltActionNoとすることにした．
これは以前あったdefaultActionの用法の混乱をひきずって
いた問題の訂正で，互換性の無い訂正となる．

2008,09/02
========================================

CATALOG.XMLにタグ情報を付けることができるということにした。
やっぱりRDFは敷居が高すぎるでしょう。ただ、これを読み出す
APIは未実装。ついでになんとなくRDFとthumbnailの順番を入れ
替えた。それと、先日作ったActionObjectインタフェースは
これで良いのかも。AutoActionControlを機能させるにはminRunSpeed
とかの情報も必要だけど、これを必須とするのもどうかということで、
AutoActionControlの機能はAction3Dの便利な機能ということに
しておこうと思う。

2008,09/01
========================================

一応、ActionObjectという名前のインタフェースを
作って、これをアクション付き3Dオブジェクトの
共通のAPIということにしてみた。でも、実験的なもの。

今の問題点はAutoActionControlの扱い。今はこの機能は
APIから抜いておいた。でも、それが正解かどうかわからないし、
この機能はどんなアクション付き3Dオブジェクトでも共通化
できそうだ。InterfaceでなくAbstractクラスの方が良いのかな？
ということで、まだまだ考察が必要。

2008,08/09
========================================

Action3Dのデータを読み込む時に使用している
キャッシュを空にするためのメソッドを用意した。
A3Viewerなどで、ファイルを作り直して、再確認する
ためにもう一度読み込む必要がある時などに使用する。

2008,08/05
========================================

CATALOG.XMLのSchemaのデータを修正して、アクションに
balloonOffset属性を付けることができるようにした
(実装はしてないけど)。それと若干のバグ修正。

Action3Dと同じようにA3Arc,A3Image,VRMLオブジェクト
にも使いやすいコンストラクタを追加。

grammar/a3format.txtにAceorla3Dファイルのフォーマット
の仕様書を置くことにする。まだ簡単な物なので、もっと詳しく書いて
ゆくべし。

2008,06/26
========================================

Action3Dクラスに文字列を引数にとるコンストラクタと
URLオブジェクトを引数にとるコンストラクタを追加しま
した。「new Action3D("x-res:///test.a3");」という
感じでオブジェクトが生成できるようになったので、
オブジェクト指向の初心者にとってわかりやすい形で
プログラムを書けるようになったと思います。

2008,03/27-2
========================================

パッケージ名をjp.sourceforge.acerola3d...に変更しました。
互換性を無視したわけですが、基本的にimport文の書き換えだけで
対応できるはずです。そしてどさくさにまぎれてA3Arc,A3Image,Action3D,
VRMLのコンストラクタとupdateメソッドの引数からisEnableBehaviorと
labelとballoonの項目を削除しました。この項目はA3InitDataやA3UpdateDataの
デフォルトデータとして設定すれば同じ効果があるので、そちらで代用してもらうことになります。

2008,03/27
========================================

ActionBehaviorなどを大改造した．いまさらだけど，
シーングラフを操作するコードを全てBehaviorに移した．
動作が安定するのを期待したい(まだチェックしてない)．

CATALOG.XMLのa3要素で指定できるscaleやoffsetや
rotationを反映させる実装が，いい加減なものだったので
直した．ただ，そのいい加減な実装に従って既存のAcerola3D
ファイルが作られていたので，変更しないといけない．
結果的に互換性の無い変更となってしまっている．
具体的には各Boneのパーツの大きさがa3要素のscaleの影響を
受けるように変更されている．

CATALOG.XMLのp要素にscaleやoffsetやrotationが付けれる
ようになった．たぶん大丈夫だと思うけど要チェック．

2008,03/13
========================================

lg3d対応のための変更一応完了。A3Spaceを作る案は
廃止。使用方法は今までと変らない。ただ今のところ、
ピッキング関係はlg3dや既存のJava3Dに組込む場合には
使えないということであきらめた。どう変更したかというと、
A3Behaviorのカメラ制御部分をCameraBehaviorに
分離。A3BehaviorをA3Objectの一つ一つに付けるように
変更した。そして、A3BehaviorとCameraBehavior
の同期を取るための内部的な工夫を加えた。

2008,03/11
========================================

lg3d対応を強化しようと考えたら、いろいろ改善点が
見えてきた。今、いじっている途中。A3Canvasの処理の
一部を分割してA3Spaceというクラスを作った。A3Spaceは
既存のJava3DプログラムのシーングラフにAcerola3Dを
組込むためのBranchGroupのサブクラス。

これに付随してBehaviorも整理中。まだ問題が山積みなので、
TODOに少し書いておく。

2008,02/21
========================================

Project Looking Glass(lg3d)に対応させようと
あがいてみる．lg3d-coreに多少修正が必要だが
一応動くようになった．(サウンドはダメ？)

2008,01/20
========================================

フリーズを検査するためのコードをexamples
の中に置いた．検査するべし．

2008,01/16
========================================

Macでは，Switchノードの下にSoundノードを
ぶら下げてスイッチすると例外が発生して止る．
以下は関連してそうなページなのだが良くわからない．

* <http://archives.devshed.com/forums/java-118/small-fix-code-included-1639078.html>
* <http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4908425>

たしかWindowsでは音じたい鳴らないし，Linuxではまれに
X WindowごとFreezeする．とりあえずSwitchを使わないで，
子ノードをaddChildしたりDetachする実装に変更(戻し)して
みる．結果Linuxでは変化なし．WindowsやMacで動作確認するべし．

2008,01/15
========================================

ナビゲーションのWalkとFlyの違いを理解して
いなかった．修正してFlyモードの実装を加えた．
ナビゲーションのためのControllerはほぼ
完成した．

2008,01/11
========================================

ナビゲーションでスレッドが使えるように
拡張して，WalkControllerをスレッドを使って
実装しなおしました．

2008,01/07
========================================

また幾つかAPIを追加しました。でも追加なので、
以前のプログラムの変更は必要ないはず。また、
ナビゲーションモードをA3Boardから移植。
flyモード以外はほぼ動作する状態になった。

2008,01/04
========================================

Action3Dに現在のアクションナンバーとアクション名
返すAPIを追加しました。

2008,01/01
========================================

A3Canvasでバックグラウンドに指定されている
A3Objectはピッキングされないようにしました。
ヘッドライトのオン・オフの機能を追加しました。
それと、昨日の実験の戻し忘れがあったので戻しました。

2007,12/31
========================================

JCanvas3dというのが使えるようになっていたので、
試してみたが、たぶん自分のLinuxのX11の環境では
無理っぽい。元に戻したけど、コードの断片を残し
ておく。

それと、A3Object.getScale()メソッドを忘れて
いた。それと、それとA3ObjectのQuatの初期値が
(0.0,0.0,0.0,0.0)だったのを(0.0,0.0,0.0,1.0)に
変更した。

2007,11/02
========================================

examplesの中のサンプルプログラムで使用している
サンプルデータをexamplesディレクトリに追加した．
今まで，自分のノートでしか動かない状態だった
のに気がついていなかった．

ほったらかしだったa2パッケージのバグを一つ
とってみた．サンプルプログラムは動くようになった．

2007,10/22
========================================

やっとAPIの整理ができました．javadocも
a2パッケジをのぞいて書くことができました．
基本的な部分には変更はないですが，マイナーな
APIを一部変更しました．大きな変更ではないのですが，
一応けじめをつけるためにVersionを2に昇格させて，
バグ取りやドキュメントの充実のほうに注力して
ゆくようにしたいと思います．


2007,07/18
========================================

java3d 1.5.1のjoalが正式に出たので，色々整理した．
一応「j3d.audiodevice」というシステムプロパティを
調べてAudioDeviceを初期化するようにしてみた．
でも，java3d 1.5.1 with joalでしか動作確認は
していない．動作確認のためのa3ファイルとサンプル
プログラムも追加した．ヘッドホンで聞いてみると
少し(頭の？)場所がずれているような気がする．

いつの間にかexampleの中のサンプルが，A23.initA23()
が無いと「x-res://…」で例外が発生するようになっていた．
Action3D.loadなどのメソッドの中にA23.initA23()
を置いて例外が発生しないようにしておいた．


2007,07/10
========================================

重い腰をあげてjavadocでAPIが生成されるように，
ソースのコメントを作成しはじめた．不要なAPIが
publicになっているところなど多数あったため，
隠蔽するように変更した箇所がいくつかある．
本当に隠蔽して大丈夫かどうか，他のシステム
に組み込んで確認作業をするべし．

2007,06/20
========================================

読み込みが非常に遅くなっていた原因は，sableccの
バージョンアップであることが判明した．たぶん
使い方が悪いだけで調べれば直るのだと思うのだが，
時間がかかりそうなので，ver3.2からver2.18.2に戻す
ことにします．

2007,05/22
========================================

サウンドの再生ができるようになった．CATALOG.XML
ファイルの<a>要素の中に<s>要素を一つ入れることで，
サウンドの指定をする．属性は今のところ以下のような感じ．

* file:サウンドのファイル名
* loop:ループする(true)しない(false)
* type:PointSound or BackgroundSound
* gain:増幅率？(実数)
* offset:音の場所のオフセットPointSoundの時のみ有効

そろそろCATALOG.XMLのフォーマットの厳密な定義が必要．
今後の課題．

2007,05/20
========================================

APIちょっと変更。A23.initA23()を使わないで済むようにした。
だが、少しテストしてみたところ微妙な点があるようだ。はじめ
A23.initA23()自体を廃止しようと考えたが、残しておくことにして、
大抵の場合はA23.initA23()は必要無い、ということにしておく。
これに従いほぼ全てのサンプルにおいて一行削除。

A23.initA23()が必要な場合と、不必要な場合を明確にしておく
必要がある。今後の課題。

2007,05/19
========================================

大改造後の最初のリリースをversion1.10という
ことで出すことにする．基本的に，APIの変更は無いが，
内部構造は大きく変更されているので，バージョン番号は
6つ飛しにした．よってなにか安定性が必要な場合は
version1.03を使うと良いかも．


2007,05/12
========================================

subversionのコメントを真面目に書いてないので，
changelogを書くようにしてみる．さらにsableccの
java5対応のものがあったので，更新しておいた
(以前のはver2.18.2で，今回のは3.2)．これで，
数十個出てた警告のほとんどが消えたけど，一個だけ
残るみたい．残念．

2007,05/06
========================================

遡ってログ．連休中に大改造した．ただしAPIなどの変更は
基本的にはない．(オイラー角をセットするA3Object.setRot()
メソッドの追加だけはやった)．

変更したのはAction3Dの内部で使われている
クラスの構成などで，その目的はデータのキャッシュの実現と
将来の拡張性の確保．キャッシュは有効に機能してるようだ．
拡張性の確保に関しては以下のような拡張を想定している
(実際の拡張はまだやってない)．

* 音声データを含めるための拡張
* キャラクタの一部のShapをロード後に変更(着せ替えとか)
* モーションデータの汎用化

