2 * VMD camerawork handler
4 * License : The MIT License
5 * Copyright(c) 2011 MikuToga Partners
8 package jp.sourceforge.mikutoga.vmd.parser;
10 import jp.sfjp.mikutoga.bin.parser.LoopHandler;
11 import jp.sfjp.mikutoga.bin.parser.MmdFormatException;
12 import jp.sfjp.mikutoga.bin.parser.ParseStage;
15 * VMDモーションファイルのカメラワーク情報の通知用ハンドラ。
16 * <p>フレーム番号は相対的なものとなる。
18 * 一番若いモーションのフレーム番号が0となる模様。
19 * <p>ターゲット位置、カメラ回転量とも、座標基準はワールド座標。
20 * <p>カメラターゲットの座標は左手系で表される。
21 * <p>ターゲットに対するカメラ位置は極座標で表される。
22 * <p>補間情報は直前カメラ情報との差分に関するもの。
24 public interface VmdCameraHandler extends LoopHandler {
26 /** カメラデータ抽出ループ識別子。 */
27 ParseStage CAMERA_LIST = new ParseStage();
31 * カメラモーションのキーフレーム番号に関する情報を通知する。
32 * <p>{@link #CAMERA_LIST}ループの構成要素。
33 * @param keyFrameNo キーフレーム番号
34 * @throws MmdFormatException 不正フォーマットによる
37 void vmdCameraMotion(int keyFrameNo)
38 throws MmdFormatException;
41 * ターゲットとカメラ間の距離情報を通知する。
42 * <p>球座標(極座標)の動径に相当する。
43 * 通常はターゲットより手前に位置するカメラまでの距離が負の値で渡される。
44 * <p>カメラ位置がターゲットを突き抜けた場合は正の値もとりうる。
46 * <p>{@link #CAMERA_LIST}ループの構成要素。
48 * @throws MmdFormatException 不正フォーマットによる
51 void vmdCameraRange(float range)
52 throws MmdFormatException;
56 * <p>{@link #CAMERA_LIST}ループの構成要素。
57 * @param xPos ターゲットのX座標
58 * @param yPos ターゲットのY座標
59 * @param zPos ターゲットのZ座標
60 * @throws MmdFormatException 不正フォーマットによる
63 void vmdCameraPosition(float xPos, float yPos, float zPos)
64 throws MmdFormatException;
67 * カメラの回転および回転量情報を通知する。
69 * <p>180度を超える値も回転量として意味を持つ。
70 * <p>{@link #CAMERA_LIST}ループの構成要素。
71 * @param latitude ターゲットから見たカメラの仰俯角(≒緯度)。
73 * <p>Y軸回転量が0の時のZ正軸がY正軸へ倒れる方向が正回転。
74 * (MMDのUIとは符号が逆になるので注意)
76 * カメラはターゲットに対しXZ平面(水平)と平行な箇所に位置する。
77 * @param longitude Y軸周りの回転量(≒経度)。単位はラジアン。
78 * <p>X正軸がZ正軸へ倒れる方向が正回転。(ボーン回転と逆)
79 * <p>仰俯角およびY軸回転量が0の場合、
80 * カメラレンズはZ軸-∞方向からZ軸+∞方向を向く。
81 * @param roll レンズをターゲットを向けたカメラのロール回転量。
82 * <p>仰俯角とY軸回転量が0の時にY正軸がX正軸に倒れる方向が正回転。
83 * <p>仰俯角およびロール回転量が0の場合、カメラ上部はY軸+∞の方を向く。
84 * @throws MmdFormatException 不正フォーマットによる
87 void vmdCameraRotation(float latitude, float longitude, float roll)
88 throws MmdFormatException;
91 * カメラを通じたスクリーン座標への投影に関する情報を通知する。
92 * <p>{@link #CAMERA_LIST}ループの構成要素。
93 * @param angle 縦画角。単位は度数法。MMDのUIでは1から125が指定可能。
94 * @param hasPerspective パースペクティブスイッチがONならtrue。
95 * スイッチがOFFの場合、画角は無視され遠近感処理が行われなくなる。
97 * @throws MmdFormatException 不正フォーマットによる
100 void vmdCameraProjection(int angle, boolean hasPerspective)
101 throws MmdFormatException;
104 * カメラターゲットX軸移動補間情報の通知を受け取る。
105 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。
106 * <p>{@link #CAMERA_LIST}ループの構成要素。
111 * @throws MmdFormatException 不正フォーマットによる
114 void vmdCameraIntpltXpos(byte p1x, byte p1y, byte p2x, byte p2y)
115 throws MmdFormatException;
118 * カメラターゲットY軸移動補間情報の通知を受け取る。
119 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。
120 * <p>{@link #CAMERA_LIST}ループの構成要素。
125 * @throws MmdFormatException 不正フォーマットによる
128 void vmdCameraIntpltYpos(byte p1x, byte p1y, byte p2x, byte p2y)
129 throws MmdFormatException;
132 * カメラターゲットZ軸移動補間情報の通知を受け取る。
133 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。
134 * <p>{@link #CAMERA_LIST}ループの構成要素。
139 * @throws MmdFormatException 不正フォーマットによる
142 void vmdCameraIntpltZpos(byte p1x, byte p1y, byte p2x, byte p2y)
143 throws MmdFormatException;
146 * カメラ回転量補間情報の通知を受け取る。
147 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。
148 * <p>{@link #CAMERA_LIST}ループの構成要素。
149 * <p>カメラ回転でクォータニオン補間は使われない。
154 * @throws MmdFormatException 不正フォーマットによる
157 void vmdCameraIntpltRotation(byte p1x, byte p1y, byte p2x, byte p2y)
158 throws MmdFormatException;
161 * カメラ-ターゲット間距離補間情報の通知を受け取る。
162 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。
163 * <p>{@link #CAMERA_LIST}ループの構成要素。
168 * @throws MmdFormatException 不正フォーマットによる
171 void vmdCameraIntpltRange(byte p1x, byte p1y, byte p2x, byte p2y)
172 throws MmdFormatException;
175 * スクリーン投影補間情報の通知を受け取る。
176 * 三次ベジェ曲線のP1,P2点に関する情報を受け取る。
177 * <p>{@link #CAMERA_LIST}ループの構成要素。
182 * @throws MmdFormatException 不正フォーマットによる
185 void vmdCameraIntpltProjection(byte p1x, byte p1y, byte p2x, byte p2y)
186 throws MmdFormatException;