[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:00220] Re: Transform3D



-------------------------------------------------------------------
○今年のバレンタインはアンナミラーズの焼きたてパイで○○○○○○○
  アンナミラーズインターネットショッピングでは、新発売のチョコレート
 チーズケーキパイを特別価格、4,000円(送料・消費税込み)でご提供中。
 ご注文は2月10日までです。 下記URLへ今すぐアクセス!
 =======> http://shopping.biglobe.ne.jp/kaze/AnnaMillers/ 
-------------------------------------------------------------------

Konnoさん、こんにちは。

Transform3Dについて調べていただいてありがとうございます。
やはり、Transform3D.set(Quat4f)の挙動は不可解ですよね。

> 次に、set(Quat4f)/set(AxisAngle4f)を、
> setRotation(Quat4f) / setRotation(AxisAngle4f)をsetIdentity()
> と組み合わせて、以下のように同様の動作をするように設定してみた
> のですがこちらは問題なく正常な値が返されてきました (^ ^)
> 
>       Transform3D t3d = new Transform3D();
>       t3d.setIdentity(); // この場合に行列生成直後なので必要は
>			   // ありませんが .....
>       t3d.setRotation(q4f);
>       t3d.get(q4f); // この結果はOK

こちらの方法を試させていただいたところ、確かに、setRotation(q4f)
を使用すると正しくQuat4fを取得することができました。
ところが、setRotation(q4f)したTransform3Dオブジェクト
に対して一度でもmul(Transform3D)してしまうと、get(Quat4f)では
正しいQuat4fオブジェクトが取得できないことがあるようです。

  Transform3D t3d0 = new Transform3D();
  t3d0.setRotation(q4f0);
  t3d0.get(q4f0);  // OK

  Transform3D t3d1 = new Transform3D();
  t3d1.setRotation(q4f1);
  t3d0.mul(t3d1);
  t3d1.get(q4f1);  // NGのときがある

このあたりは、注意して使用しなければいけないかもしれません。

> #仕様を読む限り、どうしてもSunの実装ミスであると考えてしまうの
> #ですが、皆さんはどう思われますでしょうか?

私もバグのような気がします。

それでは失礼します。

-- 
==================================================================
株式会社カーネル              PHONE 0298(57)7457  FAX 0298(57)7458
  小原  一太朗                       E-MAIL kernel@xxxxxxxxxx
==================================================================