title Acerola3D ChangeLog

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をロード後に変更(着せ替えとか)
* モーションデータの汎用化

