#author("2019-05-22T00:20:03+09:00","default:qua","qua") #author("2019-05-22T14:20:09+09:00","default:qua","qua") #navi(Processing/2.ちょっと発展) * 2-7 3Dの座標変換 [#pe4527ad] 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) のように実現される。