X-Git-Url: http://git.osdn.net/view?p=mikutoga%2FTogaGem.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fvmd%2Fparser%2FVmdCameraHandler.java;fp=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fvmd%2Fparser%2FVmdCameraHandler.java;h=1c519d379f143fc10ee7be0158c6395a5f75fd2c;hp=7fbef1f8b9654e29d9e6daa074382e7daae323e7;hb=e9585200f4122a8ab3b6c56a67e5eaadb6bdadb0;hpb=b1fef4ec0adcd1d3b614ef4508123847b4760c06 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdCameraHandler.java b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdCameraHandler.java index 7fbef1f..1c519d3 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdCameraHandler.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdCameraHandler.java @@ -13,176 +13,227 @@ import jp.sfjp.mikutoga.bin.parser.ParseStage; /** * VMDモーションファイルのカメラワーク情報の通知用ハンドラ。 + * *

フレーム番号は相対的なものとなる。 * カメラ・照明・シャドウのうち * 一番若いモーションのフレーム番号が0となる模様。 + * *

ターゲット位置、カメラ回転量とも、座標基準はワールド座標。 + * *

カメラターゲットの座標は左手系で表される。 + * *

ターゲットに対するカメラ位置は極座標で表される。 + * *

補間情報は直前カメラ情報との差分に関するもの。 */ public interface VmdCameraHandler extends LoopHandler { /** カメラデータ抽出ループ識別子。 */ - ParseStage CAMERA_LIST = new ParseStage(); + public static final ParseStage CAMERA_LIST = new ParseStage(); /** * カメラモーションのキーフレーム番号に関する情報を通知する。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param keyFrameNo キーフレーム番号 - * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * @throws MmdFormatException + * 不正フォーマットによるパース処理の中断をパーサに指示 */ - void vmdCameraMotion(int keyFrameNo) + public abstract void vmdCameraMotion(int keyFrameNo) throws MmdFormatException; /** * ターゲットとカメラ間の距離情報を通知する。 + * *

球座標(極座標)の動径に相当する。 * 通常はターゲットより手前に位置するカメラまでの距離が負の値で渡される。 + * *

カメラ位置がターゲットを突き抜けた場合は正の値もとりうる。 * ※MMDのUIと符号が逆なので注意。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param range 距離 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraRange(float range) + public abstract void vmdCameraRange(float range) throws MmdFormatException; /** * カメラのターゲット位置情報を通知する。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param xPos ターゲットのX座標 * @param yPos ターゲットのY座標 * @param zPos ターゲットのZ座標 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraPosition(float xPos, float yPos, float zPos) + public abstract void vmdCameraPosition(float xPos, float yPos, float zPos) throws MmdFormatException; /** * カメラの回転および回転量情報を通知する。 + * *

極座標(球座標)が用いられる。 + * *

180度を超える値も回転量として意味を持つ。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param latitude ターゲットから見たカメラの仰俯角(≒緯度)。 - * 単位はラジアン。 - *

Y軸回転量が0の時のZ正軸がY正軸へ倒れる方向が正回転。 - * (MMDのUIとは符号が逆になるので注意) - *

仰俯角が0の場合、 - * カメラはターゲットに対しXZ平面(水平)と平行な箇所に位置する。 + * 単位はラジアン。 + * + *

Y軸回転量が0の時のZ正軸がY正軸へ倒れる方向が正回転。 + * (MMDのUIとは符号が逆になるので注意)

+ * + *

仰俯角が0の場合、 + * カメラはターゲットに対しXZ平面(水平)と平行な箇所に位置する。

+ * * @param longitude Y軸周りの回転量(≒経度)。単位はラジアン。 - *

X正軸がZ正軸へ倒れる方向が正回転。(ボーン回転と逆) - *

仰俯角およびY軸回転量が0の場合、 - * カメラレンズはZ軸-∞方向からZ軸+∞方向を向く。 + * + *

X正軸がZ正軸へ倒れる方向が正回転。(ボーン回転と逆)

+ * + *

仰俯角およびY軸回転量が0の場合、 + * カメラレンズはZ軸-∞方向からZ軸+∞方向を向く。

+ * * @param roll レンズをターゲットを向けたカメラのロール回転量。 - *

仰俯角とY軸回転量が0の時にY正軸がX正軸に倒れる方向が正回転。 - *

仰俯角およびロール回転量が0の場合、カメラ上部はY軸+∞の方を向く。 + * + *

仰俯角とY軸回転量が0の時に + * Y正軸がX正軸に倒れる方向が正回転。

+ * + *

仰俯角およびロール回転量が0の場合、 + * カメラ上部はY軸+∞の方を向く。

+ * * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraRotation(float latitude, float longitude, float roll) + public abstract void vmdCameraRotation( + float latitude, float longitude, float roll) throws MmdFormatException; /** * カメラを通じたスクリーン座標への投影に関する情報を通知する。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param angle 縦画角。単位は度数法。MMDのUIでは1から125が指定可能。 * @param hasPerspective パースペクティブスイッチがONならtrue。 - * スイッチがOFFの場合、画角は無視され遠近感処理が行われなくなる。 - * (平行投影?) + * スイッチがOFFの場合、画角は無視され遠近感処理が行われなくなる。 + * (平行投影?) * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraProjection(int angle, boolean hasPerspective) + public abstract void vmdCameraProjection( + int angle, boolean hasPerspective) throws MmdFormatException; /** * カメラターゲットX軸移動補間情報の通知を受け取る。 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param p1x P1点のX座標 * @param p1y P1点のY座標 * @param p2x P2点のX座標 * @param p2y P2点のY座標 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraIntpltXpos(byte p1x, byte p1y, byte p2x, byte p2y) + public abstract void vmdCameraIntpltXpos( + byte p1x, byte p1y, byte p2x, byte p2y) throws MmdFormatException; /** * カメラターゲットY軸移動補間情報の通知を受け取る。 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param p1x P1点のX座標 * @param p1y P1点のY座標 * @param p2x P2点のX座標 * @param p2y P2点のY座標 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraIntpltYpos(byte p1x, byte p1y, byte p2x, byte p2y) + public abstract void vmdCameraIntpltYpos( + byte p1x, byte p1y, byte p2x, byte p2y) throws MmdFormatException; /** * カメラターゲットZ軸移動補間情報の通知を受け取る。 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param p1x P1点のX座標 * @param p1y P1点のY座標 * @param p2x P2点のX座標 * @param p2y P2点のY座標 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraIntpltZpos(byte p1x, byte p1y, byte p2x, byte p2y) + public abstract void vmdCameraIntpltZpos( + byte p1x, byte p1y, byte p2x, byte p2y) throws MmdFormatException; /** * カメラ回転量補間情報の通知を受け取る。 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * *

カメラ回転でクォータニオン補間は使われない。 + * * @param p1x P1点のX座標 * @param p1y P1点のY座標 * @param p2x P2点のX座標 * @param p2y P2点のY座標 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraIntpltRotation(byte p1x, byte p1y, byte p2x, byte p2y) + public abstract void vmdCameraIntpltRotation( + byte p1x, byte p1y, byte p2x, byte p2y) throws MmdFormatException; /** * カメラ-ターゲット間距離補間情報の通知を受け取る。 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param p1x P1点のX座標 * @param p1y P1点のY座標 * @param p2x P2点のX座標 * @param p2y P2点のY座標 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraIntpltRange(byte p1x, byte p1y, byte p2x, byte p2y) + public abstract void vmdCameraIntpltRange( + byte p1x, byte p1y, byte p2x, byte p2y) throws MmdFormatException; /** * スクリーン投影補間情報の通知を受け取る。 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。 + * *

{@link #CAMERA_LIST}ループの構成要素。 + * * @param p1x P1点のX座標 * @param p1y P1点のY座標 * @param p2x P2点のX座標 * @param p2y P2点のY座標 * @throws MmdFormatException 不正フォーマットによる - * パース処理の中断をパーサに指示 + * パース処理の中断をパーサに指示 */ - void vmdCameraIntpltProjection(byte p1x, byte p1y, byte p2x, byte p2y) + public abstract void vmdCameraIntpltProjection( + byte p1x, byte p1y, byte p2x, byte p2y) throws MmdFormatException; }