任意の方向性と長さを持たせながら、動きの影響を受ける物体の書き方
言葉でうまく表現できないのですが、下の画像を見ていただいてイメージが伝わると幸いです。
3D空間状に画像のようなトゲを持った球体を描いているのですが、それぞれのトゲは球体の動きの影響を受けるようになっています。
ただしこのようトゲが全て一定の方向を向いているのではなく、それぞれのトゲの向きが全方向を向くようにしたいと思っています。その上で球体が動いた時に上の画像のような影響を受けるという風にしたいです。
for (int i=0; i<num; i++) {
if (i==0) {
x[i]=_x;
y[i]=_y;
z[i]=_z;
} else {
x[i]=x[i]+(x[i-1]-x[i])*speed;
y[i]=y[i]+(y[i-1]-y[i])*speed;
z[i]=z[i]+(z[i-1]-z[i])*speed+2;
}
en_size = (num-i)*1.2;
translate(x[i], y[i], z[i]);
rotateZ(kakudo);
rotateY(kakudo2);
ellipse(0, 0, en_size, en_size);
rotateY(-kakudo2);
rotateZ(-kakudo);
translate(-(x[i]), -(y[i]), -(z[i]));
}
トゲ一つ一つは上記のようなコードになっており、一つのクラスとしてまとめています。トゲは円の重なりでできており、numがトゲを構成している円の数です。それぞれの円は球体の表面上の傾斜に合わせてkakudoとkakudo2を使って回転できているのですが、トゲ自体は回転できていません。(トゲ自体の回転とは、それぞれの円の傾斜に対して垂直の方向に円を重ねたいというイメージです。)
z座標に2を足しているのは、円錐形の形を維持するためです。
試しにこのクラスを丸ごと回転するようにrotateを使ってみたのですがうまくできませんでした。
色々と考えて試してみたのですが、なかなかうまくできなかったので、質問させていただきました。お力添えいただけたら幸いです。
初心者のため、わかりづらい文章とコードかと思います。申し訳ありません。必要な補足等あれば随時直しますのでよろしくお願いいたします。