[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