OSDN Git Service

modify indentation in AT-clause javadoc.
[mikutoga/TogaGem.git] / src / main / java / jp / sfjp / mikutoga / vmd / parser / VmdBasicHandler.java
1 /*
2  * VMD basic handler
3  *
4  * License : The MIT License
5  * Copyright(c) 2011 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.vmd.parser;
9
10 import jp.sfjp.mikutoga.bin.parser.LoopHandler;
11 import jp.sfjp.mikutoga.bin.parser.MmdFormatException;
12 import jp.sfjp.mikutoga.bin.parser.ParseStage;
13
14 /**
15  * VMDモーションファイルの基本情報(ボーンモーション/モーフモーション)
16  * の通知用ハンドラ。
17  *
18  * <p>フレーム番号は相対的なものとなる。
19  * 一番若いモーションのフレーム番号が0となる模様。
20  *
21  * <p>位置情報の座標基準は左手系ワールド座標で表される。
22  *
23  * <p>モーション補間情報は三次ベジェ曲線により記述される。
24  * 三次ベジェ曲線は4つの制御点P0,P1,P2,P3により定義される。
25  * P0は(0,0)、P3は(127,127)で固定。
26  * P1,P2はP0,P3を対角線とする正方形の内部になければならない。
27  * 直線補間の場合、P1には(20,20)、P2には(107,107)が使われることが多い。
28  *
29  * <p>補間情報は直後のボーンモーション情報との差分に関するもの。
30  */
31 public interface VmdBasicHandler extends LoopHandler {
32
33     /** ボーンモーション抽出ループ識別子。 */
34     public static final ParseStage BONEMOTION_LIST = new ParseStage();
35
36     /** モーフ抽出ループ識別子。 */
37     public static final ParseStage MORPH_LIST = new ParseStage();
38
39
40     /**
41      * VMDファイルのパース処理開始の通知を受け取る。
42      * @throws MmdFormatException
43      *     不正フォーマットによるパース処理の中断をパーサに指示
44      */
45     public abstract void vmdParseStart()
46             throws MmdFormatException;
47
48     /**
49      * VMDファイルのパース処理終了の通知を受け取る。
50      * @param hasMoreData
51      *     入力ソースにまだ読み込まれていないデータがあればtrue
52      * @throws MmdFormatException
53      *     不正フォーマットによるパース処理の中断をパーサに指示
54      */
55     public abstract void vmdParseEnd(boolean hasMoreData)
56             throws MmdFormatException;
57
58     /**
59      * VMDファイルの固定長ヘッダを通知する。
60      * @param header ヘッダ情報
61      * @throws MmdFormatException
62      *     不正フォーマットによるパース処理の中断をパーサに指示
63      */
64     public abstract void vmdHeaderInfo(byte[] header)
65             throws MmdFormatException;
66
67
68     /**
69      * モーションの適用先モデル名に関する情報を通知する。
70      *
71      * <p>カメラやライティングなどの演出データには
72      * 特殊なモデル名が使われる。
73      *
74      * @param modelName モデル名
75      * @throws MmdFormatException
76      *     不正フォーマットによるパース処理の中断をパーサに指示
77      */
78     public abstract void vmdModelName(String modelName)
79             throws MmdFormatException;
80
81     /**
82      * ボーンモーションのボーン名及びキーフレーム番号に関する情報を通知する。
83      *
84      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
85      *
86      * @param boneName ボーン名
87      * @param keyFrameNo キーフレーム番号
88      * @throws MmdFormatException
89      *     不正フォーマットによるパース処理の中断をパーサに指示
90      */
91     public abstract void vmdBoneMotion(String boneName, int keyFrameNo)
92             throws MmdFormatException;
93
94     /**
95      * ボーン移動モーション情報の通知を受け取る。
96      *
97      * <p>座標基準は親ボーンもしくはワールド座標。
98      *
99      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
100      *
101      * @param xPos X座標
102      * @param yPos Y座標
103      * @param zPos Z座標
104      * @throws MmdFormatException
105      *     不正フォーマットによるパース処理の中断をパーサに指示
106      */
107     public abstract void vmdBonePosition(float xPos, float yPos, float zPos)
108             throws MmdFormatException;
109
110     /**
111      * ボーン回転モーション情報の通知を受け取る。
112      *
113      * <p>回転及び姿勢はクォータニオンによって記述される。
114      * MMDUI上のボーン数値入力YXZオイラー角と等価な回転。
115      *
116      * <p>座標基準は親ボーンもしくはワールド座標。
117      *
118      * <p>※ボーン種別によっては、無意味な情報。
119      *
120      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
121      *
122      * @param qx クォータニオン虚部 X
123      * @param qy クォータニオン虚部 Y
124      * @param qz クォータニオン虚部 Z
125      * @param qw クォータニオン実部 W
126      * @throws MmdFormatException
127      *     不正フォーマットによるパース処理の中断をパーサに指示
128      */
129     public abstract void vmdBoneRotationQt(
130             float qx, float qy, float qz, float qw)
131             throws MmdFormatException;
132
133     /**
134      * ボーンモーションX軸移動補間情報の通知を受け取る。
135      *
136      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
137      *
138      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
139      *
140      * @param xP1x P1点のX座標
141      * @param xP1y P1点のY座標
142      * @param xP2x P2点のX座標
143      * @param xP2y P2点のY座標
144      * @throws MmdFormatException
145      *     不正フォーマットによるパース処理の中断をパーサに指示
146      */
147     public abstract void vmdBoneIntpltXpos(
148             byte xP1x, byte xP1y, byte xP2x, byte xP2y)
149             throws MmdFormatException;
150
151     /**
152      * ボーンモーションY軸移動補間情報の通知を受け取る。
153      *
154      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
155      *
156      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
157      *
158      * @param yP1x P1点のX座標
159      * @param yP1y P1点のY座標
160      * @param yP2x P2点のX座標
161      * @param yP2y P2点のY座標
162      * @throws MmdFormatException
163      *     不正フォーマットによるパース処理の中断をパーサに指示
164      */
165     public abstract void vmdBoneIntpltYpos(
166             byte yP1x, byte yP1y, byte yP2x, byte yP2y)
167             throws MmdFormatException;
168
169     /**
170      * ボーンモーションZ軸移動補間情報の通知を受け取る。
171      *
172      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
173      *
174      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
175      *
176      * @param zP1x P1点のX座標
177      * @param zP1y P1点のY座標
178      * @param zP2x P2点のX座標
179      * @param zP2y P2点のY座標
180      * @throws MmdFormatException
181      *     不正フォーマットによるパース処理の中断をパーサに指示
182      */
183     public abstract void vmdBoneIntpltZpos(
184             byte zP1x, byte zP1y, byte zP2x, byte zP2y)
185             throws MmdFormatException;
186
187     /**
188      * ボーンモーション回転量補間情報の通知を受け取る。
189      *
190      * <p>三次ベジェ曲線のP1,P2点に関する情報を受け取る。
191      *
192      * <p>{@link #BONEMOTION_LIST}ループの構成要素。
193      *
194      * <p>クォータニオン間のslerp処理に利用される。
195      *
196      * @param rP1x P1点のX座標
197      * @param rP1y P1点のY座標
198      * @param rP2x P2点のX座標
199      * @param rP2y P2点のY座標
200      * @throws MmdFormatException
201      *     不正フォーマットによるパース処理の中断をパーサに指示
202      */
203     public abstract void vmdBoneIntpltRot(
204             byte rP1x, byte rP1y, byte rP2x, byte rP2y)
205             throws MmdFormatException;
206
207
208     /**
209      * モーフモーション情報の通知を受け取る。
210      *
211      * <p>{@link #MORPH_LIST}ループの構成要素。
212      *
213      * @param morphName モーフ名。特殊モーフ名「base」は無視してもよい?
214      * @param keyFrameNo フレーム番号
215      * @param flex モーフ変量。通常は0.0以上1.0以下。
216      * @throws MmdFormatException
217      *     不正フォーマットによるパース処理の中断をパーサに指示
218      */
219     public abstract void vmdMorphMotion(
220             String morphName, int keyFrameNo, float flex)
221             throws MmdFormatException;
222
223 }