3D

【Java・3D】2×2×2のルービックキューブを作ろう!【Part4/5】

前回

【Java・3D】2×2×2のルービックキューブを作ろう!【Part3/5】[mathjax] 前回 https://itech-program.com/?p=2003 回転軸の謎を知ろう さてこれか...

計算用関数を作成

三角関数「sin・cos」

「Math」クラスの「sin・cos」関数を使用する際に、角度を逐一ラジアンに変換するのは、プログラムが冗長になる原因になるので、関数化します。

(Main.java)

 

Y軸回転用の関数

Y軸回転は、前回求めた数式を当てはめて回転角度を加算するだけです。

(Main.java)

 

Z軸回転用の関数

Z軸回転も、前回求めた数式を当てはめて回転角度を加算するだけです。

(Main.java)

 

回転アニメーションを作成

考え方

回転アニメーションを作る際に必要なのは「Thread」クラスと「Group」クラスとなります。

まず、「Thread」クラスを用いてアニメーション用のスレッドを作成します。

その「Thread」内でメインループを作成し、アニメーションプログラムを記述していきます。

 

アニメーションで実際に回転するのはキューブ4つを含んだ「Group」クラスとなります。

この「Group」を「cube(Group型の変数)」に追加し、「Thread」内のメインループ 内で回転角度を少しずつ変えてアニメーションさせます。

この時4つのキューブは「cube(Group型の変数)」から削除されているため、「Group」の回転アニメーションが終わったら「Group」を「cube」から削除したのち、再度「cube」に追加する必要があります。

また、「Group」の回転アニメーションをしたところでキューブ自体の回転角度が変化するわけではないので、アニメーションが終わった後に必ずキューブの回転角度に加算を行う必要があります。

回転アニメーション用のGroupを作成

回転アニメーションと回転移動処理を行う関数、「rotateFunc」を作成していきます。

この「rotateFunc」の引数には「Point3D」型の「axis」と3つの「int[]」型の「x・y・z」が入ります。

その引数の中身ついてですが、「axis」には「Rotate.X_AXIS」・「Rotate.Y_AXIS」・「Rotate.Z_AXIS」のいづれかが入り、「x・y・z」には回転に使用するキューブの位置を代入します。

では実際にプログラムを見て理解していきましょう。

(Main.java)

回転アニメーションを作成

回転アニメーションは「Thread」内に「while」ループを記述し、90度回転したら終了させることにします。

(Main.java)

 

キューブを回転させる

このままではGroupが回転しただけで、キューブは実際には回転しないので、ここでキューブを回転させます。

(Main.java)

これで「rotateFunc」は完成しました。

次回はいよいよ仕上げに入っていきます。

次回

【Java・3D】2×2×2のルービックキューブを作ろう!【Part5/5】前回 https://itech-program.com/?p=2011 X・Y・Zキーによる回転 X・Y・Zキーを押した時の...

【筆者オススメ!】
↓Javaをさらに勉強したい方へ(スポンサーリンク)



↓JavaFXをさらに勉強したい方へ(スポンサーリンク)

↓3Dプログラミングをさらに勉強したい方へ(スポンサーリンク)
ABOUT ME
IT系だんし
プログラミングが大好きな人。 趣味でゲームやツール製作をしながら、プログラミング記事を書き続けています。