2-7 3Dの座標変換

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) 

のように実現される。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS