3次元画像での座標変換も2次元と似ている。 translate(x,y,z)は、原点を(x,y,z)に移動する。 座標の回転はどの軸を中心に回転するかで3つの方法が用意されている。 rotateX(th)はX軸を中心に、rotateY(th)はY軸を中心に、rotateZ(th)はZ軸を中心にそれぞれ座標をthラジアンだけ回転させる。
次のスケッチでは立方体が回転する。ここで、frameCountはスケッチの実行開始以来、drawが実行された回数である。
void setup(){ size(300,300,P3D); } void draw(){ clear(); lights(); translate(150,150,0); rotateX(frameCount * 0.1); box(100); }
次のように、2軸の周りの回転を組み合わせることもできる。
void setup(){ size(300,300,P3D); } void draw(){ clear(); lights(); translate(150,150,0); rotateX(frameCount * 0.1); rotateZ(frameCount * 0.2); box(100); }
2次元の時と同様に、2つ以上の図形を回転させる場合には、pushMatrix(), popMatrix()で座標変換の記憶と呼び出しを行う。
【課題】 マウスの座標によって立方体を回転させるようなスケッチを作れ。 マウスのx座標, y座標の値でx軸、y軸の周りの回転角度を決めよ。 ウィンドウの両端がそれぞれ0, 2πラジアンに対応するようにせよ。
Processingには、定数PI, TWO_PIが用意されているので、x軸の周りの角度は
mouseX / width * TWO_PI
で与えられる。 なお、一般に c+(x-a)*(d-c)/(b-a) の値を計算する関数map(x,a,b,c,d)が用意されているので、同じことが、map関数を用いて
map(mouseX, 0, width, 0, TWO_PI)
のように実現される。