■東方弾幕風用3D回転ライブラリ■

概要

東方弾幕風において、面倒な3D回転を比較的手軽に計算できるようになるであろう関数群です。

使用方法

「rotate3d.dnh」を使いやすい場所にコピーして、スクリプト内でインクルードして下さい。
あるいは、スクリプト内にまるまる全部コピーしてしまっても良いかも知れません。

制限および注意点

四元数(クォータニオン)を使用しておりますので、原点を中心とした回転になります。
回転後に座標を適宜補正していただく形になることでしょう。
また、ほとんどの関数において要素数4の配列を引数として要求したり返したりします。

関数

MakeAxis(引数:4)
 1) 回転量
 2) x座標
 3) y座標
 4) z座標
原点と指定座標を通る直線を軸とした、回転を表す単位四元数を作る関数です。
返り値は要素数4の配列となります。

MakeRotate(引数:3)
 1) x軸回転量
 2) y軸回転量
 3) z軸回転量
XYZ各軸を軸に指定量回転する、回転を表す単位四元数を作る関数です。
返り値は要素数4の配列となります。

QuaternionMultiply(引数:2)
 1) 左側の四元数(配列)
 2) 右側の四元数(配列)
四元数同士の乗算を行う関数です。
複数の回転を合成する場合などに使えます。
返り値は要素数4の配列となります。

Rotate3D_A(引数:4)
 1) x座標
 2) y座標
 3) z座標
 4) 回転を表す単位四元数(配列)
四元数を用いた回転を行う関数です。
返り値は要素数4の配列となり、[1]=x座標、[2]=y座標、[3]=z座標に対応します。

Rotate3D_B(引数:2)
 1) 座標を表す四元数(配列)
 2) 回転を表す単位四元数(配列)
四元数を用いた回転を行う関数です。
Rotate3D_Aと同様ですが、こちらは回転前の座標も四元数の形で入力します。
返り値は要素数4の配列となり、[1]=x座標、[2]=y座標、[3]=z座標に対応します。

Rotate3D_C(引数:6)
 1) x座標
 2) y座標
 3) z座標
 4) x軸回転量
 5) y軸回転量
 6) z軸回転量
四元数を用いた回転を行う関数です。
一言でいえばMakeRotateとRotate3D_Aをまとめたものです。
回転を表す単位四元数を毎回生成するため、回転パターンが一定な場合は無駄に重くなります。
そういう場合はRotate3D_AかRotate3D_Bを使った方が軽いかと思われます。
返り値は要素数4の配列となり、[1]=x座標、[2]=y座標、[3]=z座標に対応します。

Perspective(引数:3)
 1) x座標 or y座標
 2) z座標
 3) 距離
簡易的に透視変換(パースペクティブ変換)を行う関数です。
これにより、回転物に立体感を出す効果が期待できます。
適正な距離は状況によって異なりますが、だいたい回転半径の3〜4倍前後が目安でしょう。
また、視点の中心は原点に固定されているので、回転後に座標を平行移動で補正する手前の段階で実行するのが良いかと思われます。