OSDN Git Service

Merge release/v3.122.2
[mikutoga/TogaGem.git] / src / main / java / jp / sfjp / mikutoga / vmd / parser / VmdLightingHandler.java
1 /*
2  * VMD lighting 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  * カメラ・照明・シャドウのうち
20  * 一番若いモーションのフレーム番号が0となる模様。
21  */
22 public interface VmdLightingHandler extends LoopHandler {
23
24     /** 照明光源データ抽出ループ識別子。 */
25     public static final ParseStage LUMINOUS_LIST = new ParseStage();
26
27     /** セルフシャドウデータ抽出ループ識別子。 */
28     public static final ParseStage SHADOW_LIST = new ParseStage();
29
30
31     /**
32      * 照明情報のキーフレーム番号に関する情報を通知する。
33      *
34      * <p>{@link #LUMINOUS_LIST}ループの構成要素。
35      *
36      * @param keyFrameNo キーフレーム番号
37      * @throws MmdFormatException
38      *     不正フォーマットによるパース処理の中断をパーサに指示
39      */
40     public abstract void vmdLuminousMotion(int keyFrameNo)
41             throws MmdFormatException;
42
43     /**
44      * 光源の色情報を通知する。
45      *
46      * <p>色情報はRGB色空間で記述される。
47      *
48      * <p>MMDのUI上の各色成分指定0~255定義域に便宜上256を追加したものが、
49      * 0.0以上1.0以下にマップされる。
50      * <ul>
51      * <li>0は正しく0.0にマップされる。
52      * <li>128は正しく0.5にマップされる。
53      * <li>255は1.0より少しだけ小さい数にマップされる。
54      * </ul>
55      *
56      * <p>{@link #LUMINOUS_LIST}ループの構成要素。
57      *
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      *     不正フォーマットによるパース処理の中断をパーサに指示
63      */
64     public abstract void vmdLuminousColor(float rVal, float gVal, float bVal)
65             throws MmdFormatException;
66
67     /**
68      * 光源の方向情報を通知する。
69      *
70      * <p>照明方向は、
71      * ワールド座標原点から伸びる方向ベクトルとして記述される。
72      * この方向ベクトルに向けて、無限遠の光源から照明が当たる。
73      *
74      * <p>MMDのスライダUI上では各軸成分の定義域は-1.0以上+1.0以下だが、
75      * さらに絶対値の大きな値を指定することも可能。
76      *
77      * <p>方向ベクトルの長さは演出上の意味を持たないが、
78      * キーフレーム間の照明方向の補間に影響を及ぼすかもしれない。
79      *
80      * <p>方向ベクトルが零ベクトル(0,0,0)の場合、全ポリゴンに影が落ちる。
81      *
82      * <p>{@link #LUMINOUS_LIST}ループの構成要素。
83      *
84      * @param xVec 方向ベクトルX軸成分
85      * @param yVec 方向ベクトルY軸成分
86      * @param zVec 方向ベクトルZ軸成分
87      * @throws MmdFormatException
88      *     不正フォーマットによるパース処理の中断をパーサに指示
89      */
90     public abstract void vmdLuminousDirection(
91             float xVec, float yVec, float zVec)
92             throws MmdFormatException;
93
94     /**
95      * シャドウ演出情報のキーフレーム番号に関する情報を通知する。
96      *
97      * <p>{@link #SHADOW_LIST}ループの構成要素。
98      *
99      * @param keyFrameNo キーフレーム番号
100      * @throws MmdFormatException
101      *     不正フォーマットによるパース処理の中断をパーサに指示
102      */
103     public abstract void vmdShadowMotion(int keyFrameNo)
104             throws MmdFormatException;
105
106     /**
107      * セルフシャドウモードを通知する。
108      *
109      * <p>{@link #SHADOW_LIST}ループの構成要素。
110      *
111      * @param shadowMode シャドウモード指定。
112      * <ul>
113      * <li>0 : シャドウOFF
114      * <li>1 : mode1 影描画の質がカメラからの距離の影響をあまり受けない。
115      * <li>2 : mode2 影描画の質をカメラからの距離に応じて劣化させる
116      * ことにより、カメラに近いオブジェクトの影描画の質を向上させる。
117      * </ul>
118      * @throws MmdFormatException
119      *     不正フォーマットによるパース処理の中断をパーサに指示
120      */
121     public abstract void vmdShadowMode(byte shadowMode)
122             throws MmdFormatException;
123
124     /**
125      * セルフシャドウの描画対象となるオブジェクトの範囲(カメラからの距離)
126      * を通知する。
127      *
128      * <p>通知されるのは幾何的な距離ではない。
129      * MMDのUI値(カメラからの距離の100倍?)を
130      * 10万で割った商を0.1から引いた値が通知される。
131      *
132      * <p>{@link #SHADOW_LIST}ループの構成要素。
133      *
134      * @param shadowScope 距離情報。
135      * @throws MmdFormatException
136      *     不正フォーマットによるパース処理の中断をパーサに指示
137      */
138     public abstract void vmdShadowScopeRaw(float shadowScope)
139             throws MmdFormatException;
140
141 }