[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00213] Re: Transform3D
-------------------------------------------------------------------
■□今話題のLinuxサーバー ■□■□■□■□■□■□■□■□■□■□
□ C300A-Linux
■ 驚きの148,000円を実現!!
□ OCNに最適・快適・超簡単設定!!
■□■□■ Digital Studio Pad http://www.pad.co.jp/ml-ad/ ■□■
--------------------------------------------------------------------
小原さん、こんにちは (^ ^)
小原さん : [Java3Djp:00212]
>Transform3Dクラスの動作について不明な点があります。
>不具合か仕様か良く分からないのですが、Transform3DクラスにQuat4fをsetして
>すぐ
>getすると、値が変わってしまっているのです。
ちょっと気になってしまいましたので、私も確認してみました。
確かにTransform3D.get(Quat4f)で取得する値は確かにおかしいですね。回転角度と
方向ベクトルが双方反転しているのかな? ..... と思って、この値をAxixAngle4fに変換
してみたのですが、間違った値はどれも回転角度は変換前と同じですが、方向ベクトルが
全然違うとようう状況でした (^ ^;)
そこで色々と試してみたのですが ..........
まず以下のように、Transform3D.set(AxisAngle4f)で同様の処理を行ってみたのですが
これもset(Quat4f)と同様に失敗するようです。念のためset()前に、setIdentity()で行列を
初期化してみたのですが、効果はありませんでした。
Transform3D t3d = new Transform3D();
t3d.setIdentity();
t3d.set(a4f);
t3d.get(q4f);
a4f.set(q4f); // この結果が異なる
次に、set(Quat4f)/set(AxisAngle4f)を、setRotation(Quat4f) / setRotation(AxisAngle4f)を
setIdentity()と組み合わせて、以下のように同様の動作をするように設定してみたのですが
こちらは問題なく正常な値が返されてきました (^ ^)
Transform3D t3d = new Transform3D();
t3d.setIdentity(); // この場合に行列生成直後なので必要はありませんが .....
t3d.setRotation(q4f);
t3d.get(q4f); // この結果はOK
結果としては、set(Quat4f)は仕様を見る限りでは上記処理と同等に思えるのですが
実際には異なる動作をしているようです。
#仕様を読む限り、どうしてもSunの実装ミスであると考えてしまうのですが、皆さんは
#どう思われますでしょうか?
----------------------------------------
Satoshi Konno
skonno@xxxxxxxxxx
http://www.cyber.koganei.tokyo.jp