4 * License : The MIT License
5 * Copyright(c) 2011 MikuToga Partners
8 package jp.sfjp.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モーションファイルのライティング情報(照明光源・セルフシャドウ)
18 * <p>フレーム番号は相対的なものとなる。
20 * 一番若いモーションのフレーム番号が0となる模様。
22 public interface VmdLightingHandler extends LoopHandler {
24 /** 照明光源データ抽出ループ識別子。 */
25 public static final ParseStage LUMINOUS_LIST = new ParseStage();
27 /** セルフシャドウデータ抽出ループ識別子。 */
28 public static final ParseStage SHADOW_LIST = new ParseStage();
32 * 照明情報のキーフレーム番号に関する情報を通知する。
34 * <p>{@link #LUMINOUS_LIST}ループの構成要素。
36 * @param keyFrameNo キーフレーム番号
37 * @throws MmdFormatException
38 * 不正フォーマットによるパース処理の中断をパーサに指示
40 public abstract void vmdLuminousMotion(int keyFrameNo)
41 throws MmdFormatException;
46 * <p>色情報はRGB色空間で記述される。
48 * <p>MMDのUI上の各色成分指定0~255定義域に便宜上256を追加したものが、
51 * <li>0は正しく0.0にマップされる。
52 * <li>128は正しく0.5にマップされる。
53 * <li>255は1.0より少しだけ小さい数にマップされる。
56 * <p>{@link #LUMINOUS_LIST}ループの構成要素。
58 * @param rVal 赤成分(0.0以上1.0以下)
59 * @param gVal 緑成分(0.0以上1.0以下)
60 * @param bVal 青成分(0.0以上1.0以下)
61 * @throws MmdFormatException
62 * 不正フォーマットによるパース処理の中断をパーサに指示
64 public abstract void vmdLuminousColor(float rVal, float gVal, float bVal)
65 throws MmdFormatException;
71 * ワールド座標原点から伸びる方向ベクトルとして記述される。
72 * この方向ベクトルに向けて、無限遠の光源から照明が当たる。
74 * <p>MMDのスライダUI上では各軸成分の定義域は-1.0以上+1.0以下だが、
75 * さらに絶対値の大きな値を指定することも可能。
77 * <p>方向ベクトルの長さは演出上の意味を持たないが、
78 * キーフレーム間の照明方向の補間に影響を及ぼすかもしれない。
80 * <p>方向ベクトルが零ベクトル(0,0,0)の場合、全ポリゴンに影が落ちる。
82 * <p>{@link #LUMINOUS_LIST}ループの構成要素。
84 * @param xVec 方向ベクトルX軸成分
85 * @param yVec 方向ベクトルY軸成分
86 * @param zVec 方向ベクトルZ軸成分
87 * @throws MmdFormatException
88 * 不正フォーマットによるパース処理の中断をパーサに指示
90 public abstract void vmdLuminousDirection(
91 float xVec, float yVec, float zVec)
92 throws MmdFormatException;
95 * シャドウ演出情報のキーフレーム番号に関する情報を通知する。
97 * <p>{@link #SHADOW_LIST}ループの構成要素。
99 * @param keyFrameNo キーフレーム番号
100 * @throws MmdFormatException
101 * 不正フォーマットによるパース処理の中断をパーサに指示
103 public abstract void vmdShadowMotion(int keyFrameNo)
104 throws MmdFormatException;
109 * <p>{@link #SHADOW_LIST}ループの構成要素。
111 * @param shadowMode シャドウモード指定。
114 * <li>1 : mode1 影描画の質がカメラからの距離の影響をあまり受けない。
115 * <li>2 : mode2 影描画の質をカメラからの距離に応じて劣化させる
116 * ことにより、カメラに近いオブジェクトの影描画の質を向上させる。
118 * @throws MmdFormatException
119 * 不正フォーマットによるパース処理の中断をパーサに指示
121 public abstract void vmdShadowMode(byte shadowMode)
122 throws MmdFormatException;
125 * セルフシャドウの描画対象となるオブジェクトの範囲(カメラからの距離)
128 * <p>通知されるのは幾何的な距離ではない。
129 * MMDのUI値(カメラからの距離の100倍?)を
130 * 10万で割った商を0.1から引いた値が通知される。
132 * <p>{@link #SHADOW_LIST}ループの構成要素。
134 * @param shadowScope 距離情報。
135 * @throws MmdFormatException
136 * 不正フォーマットによるパース処理の中断をパーサに指示
138 public abstract void vmdShadowScopeRaw(float shadowScope)
139 throws MmdFormatException;