トップページ > Java3D入門 > Java3Dの座標変換(1)

座標変換について

基本的な構成

これまで図形オブジェクトを表示するためには、「図形オブジェクト→BranchGroup→SimpleUniverse」という 登録作業を行ってきました。(図形オブジェクトについて参照) 図形オブジェクトに対して座標変換の操作を行うためには、いままでの構成を少し変える必要があります。 今回紹介する構成は実用的な構成の最小単位となるので、今後はこの構成が何度も出てくることになります。

座標変換のためには、図形オブジェクトを“TransformGroup”(トランスフォーム・グループ)に登録する必要があります。 “Transform”は「変形」という意味なので、機能をそのまんま表した名前となっています。 TransformGroupは、さらにBranchGroupに登録されます。これまでの構成において、BranchGroupと図形オブジェクトの間に TransformGroupをはさんだ感じです。

実際に座標変換操作を扱うのは、“Transform3D”(トランスフォーム・3D)というクラスです。このクラスには並行移動のメソッドや、 回転のためのメソッド、拡大・縮小のためのメソッドなどが用意されています。マニアックな座標変換をしない限りは、 これらのメソッドをそのまま使用することになります。 Transform3D内で用意した座標変化操作は、最後にTransformGroupに登録することで図形オブジェクトへ反映されます。

 

Java3Dの座標系の確認

「座標変換」というだけあって、物体の移動においてはJava3Dの座標系を知っておく必要があります。 たとえば、「物体を動かす」という操作は物体が置かれている座標を変更する操作のことを指します。 座標系を意識しておかないと、右に動かしたつもりが左に動いてしまった…ということが起こり得ます。 Java3Dにおける座標系は、普通の右手系の直交座標です。 画面の右方向がx軸の正方向、上方向がy軸の正方向、画面に向ってこちら側がz軸の正方向となっています。 これは仮想空間全体における座標系で「ワールド座標」と呼ばれています。 また、この仮想空間全体に対して行われる座標変換を「ワールド変換」と呼びます。 (これはDirectXの用語だったかもしれません…)

ワールド座標に対して、空間内に置かれている1つ1つの物体が持つ「ローカル座標」というものがあります。 1つの物体が1つの座標系を持つので、ローカル座標は物体の数だけあることになります。 なぜ、このローカル座標が必要なのかということですが、ある物体に対して平行移動や回転操作を行う場合を考えてみます。 1つの物体だけを移動させたり回転させたりしたい時に、もし座標系が1つしかないと、空間全体が平行移動したり、空間全体が 回転してしまったりします。

座標変換というのは、実際の演算を見れば行列のかけ算です。(これは後で掘り下げます) この行列のかけ算による座標変換では、原理的に、必ず基準となる「座標軸」が必要になります。 よって、数学的な処理の関係上、1つ1つの物体を別々にいじりたい場合は必ずその数だけ座標系が必要になってしまいます。

これから行う座標変換の演算はすべてローカル座標に対して行われていることになります。 もちろん、物体の配置を考えるときはワールド座標を意識します。しかし、 ローカル座標系の意味を理解しておいたほうが、いざという時にハマりにくくなります。




戻る   次へ