TogaGemは、3D動画制作ツール、MikuMikuDance(MMD)で用いられる各種データファイルを読み書きするためのJavaライブラリです。旧TogaParserライブラリの資産は、TogaGemライブラリに吸収されました。
修订版 | d54d085465190b23453a7128d9976689b4a048f6 (tree) |
---|---|
时间 | 2015-06-07 15:25:45 |
作者 | naz_o |
Commiter | naz_o |
PMX Parser till MorphParse
@@ -3,6 +3,9 @@ | ||
3 | 3 | |
4 | 4 | TogaGem 変更履歴 |
5 | 5 | |
6 | +3.n3 (2015-06-07) | |
7 | + ・PMX パーサーがモーフ読み込みまで一応の完成。 | |
8 | + | |
6 | 9 | 3.n2 (2015-05-29) |
7 | 10 | ・PMX パーサーがボーン読み込みまで一応の完成。 |
8 | 11 |
@@ -16,7 +16,7 @@ | ||
16 | 16 | <groupId>jp.sourceforge.mikutoga</groupId> |
17 | 17 | <artifactId>togagem</artifactId> |
18 | 18 | |
19 | - <version>3.n2</version> | |
19 | + <version>3.n3</version> | |
20 | 20 | |
21 | 21 | <packaging>jar</packaging> |
22 | 22 | <name>TogaGem</name> |
@@ -22,6 +22,9 @@ | ||
22 | 22 | /** ボーングループ内訳抽出ループ。 */ |
23 | 23 | ParseStage GROUPEDBONE_LIST = new ParseStage(); |
24 | 24 | |
25 | + /** モーフ出現順抽出ループ。 */ | |
26 | + ParseStage MORPHORDER_LIST = new ParseStage(); | |
27 | + | |
25 | 28 | /** |
26 | 29 | * ボーングループ名定義の通知を受け取る。 |
27 | 30 | * <p>{@link #BONEGROUP_LIST}ループの構成要素。 |
@@ -42,4 +45,12 @@ | ||
42 | 45 | void pmxGroupedBoneInfo(int boneId, int groupId) |
43 | 46 | throws MmdFormatException; |
44 | 47 | |
48 | + /** | |
49 | + * 各モーフ種別内のGUI表示順の通知を受け取る。 | |
50 | + * <p>{@link #MORPHORDER_LIST}ループの構成要素 | |
51 | + * @param morphId モーフ通し番号。同一モーフ種別内の大小関係のみ意味がある。 | |
52 | + * @throws MmdFormatException 不正フォーマットによる | |
53 | + * パース処理の中断をパーサに指示 | |
54 | + */ | |
55 | + void pmxMorphOrderInfo(int morphId) throws MmdFormatException; | |
45 | 56 | } |
@@ -0,0 +1,230 @@ | ||
1 | +/* | |
2 | + * PMX morph information handler | |
3 | + * | |
4 | + * License : The MIT License | |
5 | + * Copyright(c) 2010 MikuToga Partners | |
6 | + */ | |
7 | + | |
8 | +package jp.sfjp.mikutoga.pmx.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 | + * PMXモデルのモーフ情報の通知用ハンドラ。 | |
16 | + */ | |
17 | +public interface PmxMorphHandler extends LoopHandler { | |
18 | + | |
19 | + /** モーフ抽出ループ。 */ | |
20 | + ParseStage MORPH_LIST = new ParseStage(); | |
21 | + | |
22 | + /** モーフ要素抽出ループ。 */ | |
23 | + ParseStage MORPH_ELEMENT_LIST = new ParseStage(); | |
24 | + | |
25 | + | |
26 | + /** | |
27 | + * モーフ情報の通知を受け取る. | |
28 | + * <p>{@link #MORPH_LIST}ループの構成要素</p> | |
29 | + * @param morphName モーフ名. | |
30 | + * @param morphNameE name of the morph. | |
31 | + * @param panelType モーフ操作パネルをどこに表示するか. | |
32 | + * <ul> | |
33 | + * <li>0:システム予約</li> | |
34 | + * <li>1:まゆ</li> | |
35 | + * <li>2:目</li> | |
36 | + * <li>3:リップ</li> | |
37 | + * <li>4:その他</li> | |
38 | + * </ul> | |
39 | + * @throws MmdFormatException 不正フォーマットによる | |
40 | + * パース処理の中断をパーサに指示 | |
41 | + */ | |
42 | + void pmxMorphInfo(String morphName, String morphNameE, byte panelType) | |
43 | + throws MmdFormatException; | |
44 | + | |
45 | + /** | |
46 | + * モーフ変形量の種類・要素数を受け取る. | |
47 | + * <p>{@link #MORPH_LIST}ループの構成要素.</p> | |
48 | + * @param morphType モーフの種類.<ul> | |
49 | + * <li>0:グループ</li> | |
50 | + * <li>1:頂点</li> | |
51 | + * <li>2:ボーン</li> | |
52 | + * <li>3:UV</li> | |
53 | + * <li>4:追加UV1</li> | |
54 | + * <li>5:追加UV2</li> | |
55 | + * <li>6:追加UV3</li> | |
56 | + * <li>7:追加UV4</li> | |
57 | + * <li>8:材質</li> | |
58 | + * </ul> | |
59 | + * @param numOfOffsets オフセット要素の数. | |
60 | + * @throws MmdFormatException 不正フォーマットによる | |
61 | + * パース処理の中断をパーサに指示 | |
62 | + */ | |
63 | + void pmxMorphElementListHeader(byte morphType, int numOfOffsets) | |
64 | + throws MmdFormatException; | |
65 | + | |
66 | + /** | |
67 | + * 頂点モーフ変形の通知を受け取る. | |
68 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
69 | + * @param vertexId 頂点ID | |
70 | + * @param xPos X軸変位 | |
71 | + * @param yPos Y軸変位 | |
72 | + * @param zPos Z軸変位 | |
73 | + * @throws MmdFormatException 不正フォーマットによる | |
74 | + * パース処理の中断をパーサに指示 | |
75 | + */ | |
76 | + void pmxMorphVertexInfo(int vertexId, | |
77 | + float xPos, float yPos, float zPos) | |
78 | + throws MmdFormatException; | |
79 | + | |
80 | + /** | |
81 | + * UVモーフ変形の通知を受け取る. | |
82 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
83 | + * @param vertexId 頂点ID | |
84 | + * @param uPos U軸変位 | |
85 | + * @param vPos V軸変位 | |
86 | + * @param zPos Z軸変位. (無駄だが記録してある.) | |
87 | + * @param wPos w軸変位. (無駄だが記録してある.) | |
88 | + * @throws MmdFormatException 不正フォーマットによる | |
89 | + * パース処理の中断をパーサに指示 | |
90 | + */ | |
91 | + void pmxMorphUVInfo(int vertexId, | |
92 | + float uPos, float vPos, float zPos, float wPos) | |
93 | + throws MmdFormatException; | |
94 | + | |
95 | + /** | |
96 | + * ボーンモーフ変形の通知を受け取る. | |
97 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
98 | + * @param vertexId ボーンID | |
99 | + * @param xPos X軸変位. | |
100 | + * @param yPos Y軸変位. | |
101 | + * @param zPos Z軸変位. | |
102 | + * @param qx クオータニオンx軸. | |
103 | + * @param qy クオータニオンy軸. | |
104 | + * @param qz クオータニオンz軸. | |
105 | + * @param qw クオータニオンw軸. | |
106 | + * @throws MmdFormatException 不正フォーマットによる | |
107 | + * パース処理の中断をパーサに指示 | |
108 | + */ | |
109 | + void pmxMorphBoneInfo(int vertexId, | |
110 | + float xPos, float yPos, float zPos, | |
111 | + float qx, float qy, float qz, float qw) | |
112 | + throws MmdFormatException; | |
113 | + | |
114 | + /** | |
115 | + * 材質モーフ変形の通知を受け取る. | |
116 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
117 | + * @param materialId 材質ID. -1:全材質対象. | |
118 | + * @param type 0:乗算式か, 1:加算式か. | |
119 | + * @throws MmdFormatException 不正フォーマットによる | |
120 | + * パース処理の中断をパーサに指示 | |
121 | + */ | |
122 | + void pmxMorphMaterialInfo(int materialId, byte type) | |
123 | + throws MmdFormatException; | |
124 | + | |
125 | + /** | |
126 | + * 材質モーフ変形の拡散光成分の通知を受け取る. | |
127 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
128 | + * @param red 0.0~1.0の範囲の赤成分 | |
129 | + * @param green 0.0~1.0の範囲の緑成分 | |
130 | + * @param blue 0.0~1.0の範囲の青成分 | |
131 | + * @param alpha 0.0(透明)~1.0(不透明)のアルファ値。 | |
132 | + * @throws MmdFormatException 不正フォーマットによる | |
133 | + * パース処理の中断をパーサに指示 | |
134 | + */ | |
135 | + void pmxMorphMaterialDiffuse(float red, float green, float blue, | |
136 | + float alpha) | |
137 | + throws MmdFormatException; | |
138 | + | |
139 | + /** | |
140 | + * 材質モーフ変形の反射光成分の通知を受け取る. | |
141 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
142 | + * @param red 0.0~1.0の範囲の赤成分 | |
143 | + * @param green 0.0~1.0の範囲の緑成分 | |
144 | + * @param blue 0.0~1.0の範囲の青成分 | |
145 | + * @param shininess 光沢強度(1~15ぐらい) | |
146 | + * @throws MmdFormatException 不正フォーマットによる | |
147 | + * パース処理の中断をパーサに指示 | |
148 | + */ | |
149 | + void pmxMorphMaterialSpecular(float red, float green, float blue, | |
150 | + float shininess) | |
151 | + throws MmdFormatException; | |
152 | + | |
153 | + /** | |
154 | + * 材質モーフ変形の環境色成分の通知を受け取る. | |
155 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
156 | + * @param red 0.0~1.0の範囲の赤成分 | |
157 | + * @param green 0.0~1.0の範囲の緑成分 | |
158 | + * @param blue 0.0~1.0の範囲の青成分 | |
159 | + * @throws MmdFormatException 不正フォーマットによる | |
160 | + * パース処理の中断をパーサに指示 | |
161 | + */ | |
162 | + void pmxMorphMaterialAmbient(float red, float green, float blue) | |
163 | + throws MmdFormatException; | |
164 | + | |
165 | + /** | |
166 | + * 材質モーフ変形のエッジ成分の通知を受け取る. | |
167 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
168 | + * @param red 0.0~1.0の範囲の赤成分 | |
169 | + * @param green 0.0~1.0の範囲の緑成分 | |
170 | + * @param blue 0.0~1.0の範囲の青成分 | |
171 | + * @param alpha 0.0(透明)~1.0(不透明)のアルファ値。 | |
172 | + * @param thick 0.0~2.0くらいの厚さ | |
173 | + * @throws MmdFormatException 不正フォーマットによる | |
174 | + * パース処理の中断をパーサに指示 | |
175 | + */ | |
176 | + public void pmxMorphMaterialEdges(float red, float green, float blue, | |
177 | + float alpha, float thick) | |
178 | + throws MmdFormatException; | |
179 | + | |
180 | + /** | |
181 | + * 材質モーフ変形のテキスチャーフィルター成分の通知を受け取る. | |
182 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
183 | + * @param red 0.0~1.0の範囲の赤成分 | |
184 | + * @param green 0.0~1.0の範囲の緑成分 | |
185 | + * @param blue 0.0~1.0の範囲の青成分 | |
186 | + * @param alpha 0.0(透明)~1.0(不透明)のアルファ値。 | |
187 | + * @throws MmdFormatException 不正フォーマットによる | |
188 | + * パース処理の中断をパーサに指示 | |
189 | + */ | |
190 | + void pmxMorphMaterialTexture(float red, float green, float blue, float alpha) | |
191 | + throws MmdFormatException; | |
192 | + | |
193 | + /** | |
194 | + * 材質モーフ変形のスフィアマップフィルター成分の通知を受け取る. | |
195 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
196 | + * @param red 0.0~1.0の範囲の赤成分 | |
197 | + * @param green 0.0~1.0の範囲の緑成分 | |
198 | + * @param blue 0.0~1.0の範囲の青成分 | |
199 | + * @param alpha 0.0(透明)~1.0(不透明)のアルファ値。 | |
200 | + * @throws MmdFormatException 不正フォーマットによる | |
201 | + * パース処理の中断をパーサに指示 | |
202 | + */ | |
203 | + void pmxMorphMaterialSphere(float red, float green, float blue, float alpha) | |
204 | + throws MmdFormatException; | |
205 | + | |
206 | + /** | |
207 | + * 材質モーフ変形のトゥーンフィルター成分の通知を受け取る. | |
208 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
209 | + * @param red 0.0~1.0の範囲の赤成分 | |
210 | + * @param green 0.0~1.0の範囲の緑成分 | |
211 | + * @param blue 0.0~1.0の範囲の青成分 | |
212 | + * @param alpha 0.0(透明)~1.0(不透明)のアルファ値。 | |
213 | + * @throws MmdFormatException 不正フォーマットによる | |
214 | + * パース処理の中断をパーサに指示 | |
215 | + */ | |
216 | + void pmxMorphMaterialToon(float red, float green, float blue, float alpha) | |
217 | + throws MmdFormatException; | |
218 | + | |
219 | + /** | |
220 | + * グループモーフ変形の通知を受け取る. | |
221 | + * <p>{@link #MORPH_LIST}ループの下位{@link #MORPHELEMENT_LIST}の構成要素.</p> | |
222 | + * @param morphId 子モーフのID. | |
223 | + * @param ratio 0.0~1.0の範囲の比率. | |
224 | + * 仕様書には乗算と書かれているが、実際は加算なんじゃないかな. | |
225 | + * @throws MmdFormatException 不正フォーマットによる | |
226 | + * パース処理の中断をパーサに指示 | |
227 | + */ | |
228 | + void pmxMorphGroupInfo(int morphId,float ratio) | |
229 | + throws MmdFormatException; | |
230 | +} |
@@ -46,14 +46,13 @@ | ||
46 | 46 | static{ |
47 | 47 | } |
48 | 48 | |
49 | - | |
50 | 49 | private PmxBasicHandler basicHandler = PmxUnifiedHandler.EMPTY; |
51 | 50 | private PmxVertexHandler vertexHandler = PmxUnifiedHandler.EMPTY; |
52 | 51 | private PmxFaceHandler faceHandler = PmxUnifiedHandler.EMPTY; |
53 | 52 | private PmxMaterialHandler materialHandler = PmxUnifiedHandler.EMPTY; |
54 | 53 | private PmxBoneHandler boneHandler = PmxUnifiedHandler.EMPTY; |
55 | -/* private PmxMorphHandler morphHandler = PmxUnifiedHandler.EMPTY; | |
56 | - private PmxMenuHandler menuHandler = PmxUnifiedHandler.EMPTY; | |
54 | + private PmxMorphHandler morphHandler = PmxUnifiedHandler.EMPTY; | |
55 | +/* private PmxMenuHandler menuHandler = PmxUnifiedHandler.EMPTY; | |
57 | 56 | private PmxRigidHandler rigidHandler = PmxUnifiedHandler.EMPTY; |
58 | 57 | private PmxJointHandler jointHandler = PmxUnifiedHandler.EMPTY;*/ |
59 | 58 |
@@ -171,14 +170,14 @@ | ||
171 | 170 | * モーフ情報通知ハンドラを登録する。 |
172 | 171 | * @param handler ハンドラ |
173 | 172 | */ |
174 | -/* public void setMorphHandler(PmxMorphHandler handler){ | |
173 | + public void setMorphHandler(PmxMorphHandler handler){ | |
175 | 174 | if(handler == null){ |
176 | 175 | this.morphHandler = PmxUnifiedHandler.EMPTY; |
177 | 176 | }else{ |
178 | 177 | this.morphHandler = handler; |
179 | 178 | } |
180 | 179 | return; |
181 | - }*/ | |
180 | + } | |
182 | 181 | |
183 | 182 | /** |
184 | 183 | * パースによって得られたボーン数を返す。 |
@@ -308,9 +307,9 @@ | ||
308 | 307 | parseFaceList(); |
309 | 308 | parseMaterialList(); |
310 | 309 | parseBoneList(); |
311 | -/* parseIKList(); | |
310 | +// parseIKList(); | |
312 | 311 | parseMorphList(); |
313 | - parseMorphOrderList(); | |
312 | +/* parseMorphOrderList(); | |
314 | 313 | parseBoneGroupList(); |
315 | 314 | parseGroupedBoneList();*/ |
316 | 315 | } |
@@ -647,54 +646,123 @@ | ||
647 | 646 | * @throws IOException IOエラー |
648 | 647 | * @throws MmdFormatException フォーマットエラー |
649 | 648 | */ |
650 | -/* private void parseMorphList() throws IOException, MmdFormatException{ | |
651 | - this.morphCount = parseLeUShortAsInt(); | |
652 | - | |
653 | - this.morphHandler.loopStart(PmdMorphHandler.MORPH_LIST, | |
654 | - this.morphCount ); | |
649 | + private void parseMorphList() throws IOException, MmdFormatException{ | |
650 | + this.morphCount = parseLeInt(); | |
651 | + this.morphHandler.loopStart(PmxMorphHandler.MORPH_LIST, | |
652 | + this.morphCount); | |
655 | 653 | |
656 | 654 | for(int ct = 0; ct < this.morphCount; ct++){ |
657 | - String morphName = | |
658 | - parsePmdText(PmdConst.MAXBYTES_MORPHNAME); | |
659 | - int vertexCount = parseLeInt(); | |
660 | - byte morphType = parseByte(); | |
655 | + String name = parsePmxText(); | |
656 | + String nameE = parsePmxText(); | |
657 | + byte panelType = parseByte(); | |
658 | + this.morphHandler.pmxMorphInfo(name, nameE, panelType); | |
661 | 659 | |
662 | - this.morphHandler.pmdMorphInfo(morphName, morphType); | |
660 | + byte morphType = parseByte(); | |
661 | + int numOfOffsets = parseLeInt(); | |
662 | + this.morphHandler.pmxMorphElementListHeader(morphType, numOfOffsets); | |
663 | 663 | |
664 | - parseMorphVertexList(vertexCount); | |
664 | + parseMorphElementList(morphType,numOfOffsets); | |
665 | 665 | |
666 | - this.morphHandler.loopNext(PmdMorphHandler.MORPH_LIST); | |
666 | + this.morphHandler.loopNext(PmxMorphHandler.MORPH_LIST); | |
667 | 667 | } |
668 | 668 | |
669 | - this.morphHandler.loopEnd(PmdMorphHandler.MORPH_LIST); | |
669 | + this.morphHandler.loopEnd(PmxMorphHandler.MORPH_LIST); | |
670 | 670 | |
671 | - }*/ | |
671 | + } | |
672 | 672 | |
673 | 673 | /** |
674 | - * モーフ形状のパースと通知。 | |
675 | - * @param vertexCount 頂点数 | |
674 | + * モーフ変形要素リストのパースと通知。 | |
675 | + * @param elementCount 要素数 | |
676 | 676 | * @throws IOException IOエラー |
677 | 677 | * @throws MmdFormatException フォーマットエラー |
678 | 678 | */ |
679 | -/* private void parseMorphVertexList(int vertexCount) | |
679 | + private void parseMorphElementList(byte morphType, int elementCount) | |
680 | 680 | throws IOException, MmdFormatException{ |
681 | - this.morphHandler.loopStart(PmdMorphHandler.MORPHVERTEX_LIST, | |
682 | - vertexCount ); | |
681 | + this.morphHandler.loopStart(PmxMorphHandler.MORPH_ELEMENT_LIST, | |
682 | + elementCount); | |
683 | 683 | |
684 | - for(int ct = 0; ct < vertexCount; ct++){ | |
685 | - int vertexId = parseLeInt(); | |
686 | - float xPos = parseLeFloat(); | |
687 | - float yPos = parseLeFloat(); | |
688 | - float zPos = parseLeFloat(); | |
689 | - this.morphHandler.pmdMorphVertexInfo(vertexId, xPos, yPos, zPos); | |
684 | + int id; | |
685 | + for(int ct = 0; ct < elementCount; ct++){ | |
686 | + if(morphType==0){// group | |
687 | + id=parsePmxId(size_morph); | |
688 | + float ratio=parseLeFloat(); | |
689 | + this.morphHandler.pmxMorphGroupInfo(id, ratio); | |
690 | + } else if(morphType==2){ // bone | |
691 | + id=parsePmxId(size_bone); | |
692 | + float xPos = parseLeFloat(); | |
693 | + float yPos = parseLeFloat(); | |
694 | + float zPos = parseLeFloat(); | |
695 | + float qx = parseLeFloat(); | |
696 | + float qy = parseLeFloat(); | |
697 | + float qz = parseLeFloat(); | |
698 | + float qw = parseLeFloat(); | |
699 | + this.morphHandler.pmxMorphBoneInfo(id, xPos, yPos, zPos, | |
700 | + qx, qy, qz, qw); | |
701 | + } else if(morphType<8){ // vertex, UV | |
702 | + id=parsePmxUId(size_vertex); | |
703 | + if(morphType==1){ | |
704 | + float xPos = parseLeFloat(); | |
705 | + float yPos = parseLeFloat(); | |
706 | + float zPos = parseLeFloat(); | |
707 | + this.morphHandler.pmxMorphVertexInfo(id, xPos, yPos, zPos); | |
708 | + } else { // UV | |
709 | + float u = parseLeFloat(); | |
710 | + float v = parseLeFloat(); | |
711 | + float z = parseLeFloat(); | |
712 | + float w = parseLeFloat(); | |
713 | + this.morphHandler.pmxMorphUVInfo(id, u, v, z, w); | |
714 | + } | |
715 | + } else if(morphType==8){ // material | |
716 | + id=parsePmxId(size_material); | |
717 | + byte type=parseByte(); | |
718 | + this.morphHandler.pmxMorphMaterialInfo(id, type); | |
690 | 719 | |
691 | - this.morphHandler.loopNext(PmdMorphHandler.MORPHVERTEX_LIST); | |
692 | - } | |
720 | + float r = parseLeFloat(); | |
721 | + float g = parseLeFloat(); | |
722 | + float b = parseLeFloat(); | |
723 | + float a = parseLeFloat(); | |
724 | + this.morphHandler.pmxMorphMaterialDiffuse(r, g, b, a); | |
693 | 725 | |
694 | - this.morphHandler.loopEnd(PmdMorphHandler.MORPHVERTEX_LIST); | |
726 | + r = parseLeFloat(); | |
727 | + g = parseLeFloat(); | |
728 | + b = parseLeFloat(); | |
729 | + a = parseLeFloat(); | |
730 | + this.morphHandler.pmxMorphMaterialSpecular(r, g, b, a); | |
695 | 731 | |
696 | - return; | |
697 | - }*/ | |
732 | + r = parseLeFloat(); | |
733 | + g = parseLeFloat(); | |
734 | + b = parseLeFloat(); | |
735 | + this.morphHandler.pmxMorphMaterialAmbient(r, g, b); | |
736 | + | |
737 | + r = parseLeFloat(); | |
738 | + g = parseLeFloat(); | |
739 | + b = parseLeFloat(); | |
740 | + a = parseLeFloat(); | |
741 | + float thickness = parseLeFloat(); | |
742 | + this.morphHandler.pmxMorphMaterialEdges(r, g, b, a, thickness); | |
743 | + | |
744 | + r = parseLeFloat(); | |
745 | + g = parseLeFloat(); | |
746 | + b = parseLeFloat(); | |
747 | + a = parseLeFloat(); | |
748 | + this.morphHandler.pmxMorphMaterialTexture(r, g, b, a); | |
749 | + | |
750 | + r = parseLeFloat(); | |
751 | + g = parseLeFloat(); | |
752 | + b = parseLeFloat(); | |
753 | + a = parseLeFloat(); | |
754 | + this.morphHandler.pmxMorphMaterialSphere(r, g, b, a); | |
755 | + | |
756 | + r = parseLeFloat(); | |
757 | + g = parseLeFloat(); | |
758 | + b = parseLeFloat(); | |
759 | + a = parseLeFloat(); | |
760 | + this.morphHandler.pmxMorphMaterialToon(r, g, b, a); | |
761 | + } | |
762 | + this.morphHandler.loopNext(PmxMorphHandler.MORPH_ELEMENT_LIST); | |
763 | + } | |
764 | + this.morphHandler.loopEnd(PmxMorphHandler.MORPH_ELEMENT_LIST); | |
765 | + } | |
698 | 766 | |
699 | 767 | /** |
700 | 768 | * モーフGUI表示順のパースと通知。 |
@@ -17,8 +17,8 @@ | ||
17 | 17 | PmxVertexHandler, |
18 | 18 | PmxFaceHandler, |
19 | 19 | PmxMaterialHandler, |
20 | - PmxBoneHandler/*, | |
21 | - PmxMorphHandler, | |
20 | + PmxBoneHandler, | |
21 | + PmxMorphHandler/*, | |
22 | 22 | PmxMenuHandler, |
23 | 23 | PmxRigidHandler, |
24 | 24 | PmxJointHandler*/ { |
@@ -7,6 +7,7 @@ | ||
7 | 7 | |
8 | 8 | package sample.pmx; |
9 | 9 | |
10 | +import jp.sfjp.mikutoga.bin.parser.MmdFormatException; | |
10 | 11 | import jp.sfjp.mikutoga.bin.parser.ParseStage; |
11 | 12 | import jp.sfjp.mikutoga.pmx.parser.PmxBoneHandler; |
12 | 13 | import jp.sfjp.mikutoga.pmx.parser.PmxFaceHandler; |
@@ -95,23 +96,23 @@ | ||
95 | 96 | |
96 | 97 | @Override |
97 | 98 | public void pmxVertexPosition(float xPos, float yPos, float zPos){ |
98 | - System.out.print("Vertex," + xPos + "," + yPos + "," + zPos); | |
99 | +// System.out.print("Vertex," + xPos + "," + yPos + "," + zPos); | |
99 | 100 | } |
100 | 101 | |
101 | 102 | @Override |
102 | 103 | public void pmxVertexNormal(float xVec, float yVec, float zVec){ |
103 | - System.out.print("," + xVec + "," + yVec + "," + zVec); | |
104 | +// System.out.print("," + xVec + "," + yVec + "," + zVec); | |
104 | 105 | } |
105 | 106 | |
106 | 107 | @Override |
107 | 108 | public void pmxVertexUV(float uVal, float vVal){ |
108 | - System.out.println("," + uVal + "," + vVal); | |
109 | +// System.out.println("," + uVal + "," + vVal); | |
109 | 110 | } |
110 | 111 | |
111 | 112 | @Override |
112 | 113 | public void pmxVertexExUV(byte i, float xVal, float yVal, float zVal, float wVal) { |
113 | - System.out.println("exUV["+i+"]: x,y,z,w= " + xVal + "," + yVal | |
114 | - + "," + zVal + "," + wVal); | |
114 | +// System.out.println("exUV["+i+"]: x,y,z,w= " + xVal + "," + yVal | |
115 | +// + "," + zVal + "," + wVal); | |
115 | 116 | } |
116 | 117 | |
117 | 118 | @Override |
@@ -134,8 +135,8 @@ | ||
134 | 135 | public void pmxFaceTriangle(int vertexId_1, |
135 | 136 | int vertexId_2, |
136 | 137 | int vertexId_3){ |
137 | - System.out.print("Face," | |
138 | - + vertexId_1 + "," + vertexId_2 + "," + vertexId_3); | |
138 | +// System.out.print("Face," | |
139 | +// + vertexId_1 + "," + vertexId_2 + "," + vertexId_3); | |
139 | 140 | } |
140 | 141 | |
141 | 142 | @Override |
@@ -258,4 +259,76 @@ | ||
258 | 259 | } |
259 | 260 | } |
260 | 261 | } |
262 | + | |
263 | + @Override | |
264 | + public void pmxMorphInfo(String name, String nameE, byte panelType) throws MmdFormatException { | |
265 | + System.out.print("Morph," + name+","+ nameE+","+panelType); | |
266 | + } | |
267 | + | |
268 | + @Override | |
269 | + public void pmxMorphElementListHeader(byte morphType, int numOfOffsets) throws MmdFormatException { | |
270 | + System.out.println(","+morphType); | |
271 | + System.out.println(numOfOffsets); | |
272 | + } | |
273 | + | |
274 | + @Override | |
275 | + public void pmxMorphVertexInfo(int vertexId, float xPos, float yPos, float zPos) throws MmdFormatException { | |
276 | + System.out.println("VertexMorph,"+vertexId+","+xPos+","+yPos+","+zPos); | |
277 | + } | |
278 | + | |
279 | + @Override | |
280 | + public void pmxMorphUVInfo(int vertexId, float uPos, float vPos, float zPos, float wPos) throws MmdFormatException { | |
281 | + System.out.println("UVMorph,"+vertexId+","+uPos+","+vPos+","+zPos); | |
282 | + } | |
283 | + | |
284 | + @Override | |
285 | + public void pmxMorphBoneInfo(int vertexId, float xPos, float yPos, float zPos, float qx, float qy, float qz, float qw) throws MmdFormatException { | |
286 | + System.out.println("BoneMorph,"+vertexId+","+xPos+","+yPos+","+zPos | |
287 | + +","+qx+","+qy+","+qz+","+qw); | |
288 | + } | |
289 | + | |
290 | + @Override | |
291 | + public void pmxMorphMaterialInfo(int materialId, byte type) throws MmdFormatException { | |
292 | + System.out.print("materialMorph,"+materialId+","+type); | |
293 | + } | |
294 | + | |
295 | + @Override | |
296 | + public void pmxMorphMaterialDiffuse(float red, float green, float blue, float alpha) throws MmdFormatException { | |
297 | + System.out.print("," +red +"," +green +"," +blue +"," +alpha); | |
298 | + } | |
299 | + | |
300 | + @Override | |
301 | + public void pmxMorphMaterialSpecular(float red, float green, float blue, float shininess) throws MmdFormatException { | |
302 | + System.out.print("," +red +"," +green +"," +blue +"," +shininess); | |
303 | + } | |
304 | + | |
305 | + @Override | |
306 | + public void pmxMorphMaterialAmbient(float red, float green, float blue) throws MmdFormatException { | |
307 | + System.out.print("," +red +"," +green +"," +blue); | |
308 | + } | |
309 | + | |
310 | + @Override | |
311 | + public void pmxMorphMaterialEdges(float red, float green, float blue, float alpha, float thick) throws MmdFormatException { | |
312 | + System.out.print("," +red +"," +green +"," +blue +"," +alpha+","+thick); | |
313 | + } | |
314 | + | |
315 | + @Override | |
316 | + public void pmxMorphMaterialTexture(float red, float green, float blue, float alpha) throws MmdFormatException { | |
317 | + System.out.print("," +red +"," +green +"," +blue +"," +alpha); | |
318 | + } | |
319 | + | |
320 | + @Override | |
321 | + public void pmxMorphMaterialSphere(float red, float green, float blue, float alpha) throws MmdFormatException { | |
322 | + System.out.print("," +red +"," +green +"," +blue +"," +alpha); | |
323 | + } | |
324 | + | |
325 | + @Override | |
326 | + public void pmxMorphMaterialToon(float red, float green, float blue, float alpha) throws MmdFormatException { | |
327 | + System.out.print("," +red +"," +green +"," +blue +"," +alpha); | |
328 | + } | |
329 | + | |
330 | + @Override | |
331 | + public void pmxMorphGroupInfo(int morphId, float ratio) throws MmdFormatException { | |
332 | + System.out.println("GroupMorph,"+morphId+","+ratio); | |
333 | + } | |
261 | 334 | } |
@@ -27,8 +27,7 @@ | ||
27 | 27 | private static final DummyHandler handler = new DummyHandler(); |
28 | 28 | |
29 | 29 | static{ |
30 | - PMXFILE = | |
31 | - "test.pmx"; | |
30 | + PMXFILE ="test.pmx"; | |
32 | 31 | } |
33 | 32 | |
34 | 33 | /** |
@@ -81,8 +80,8 @@ | ||
81 | 80 | parser.setFaceHandler(handler); |
82 | 81 | parser.setMaterialHandler(handler); |
83 | 82 | parser.setBoneHandler(handler); |
84 | -/* parser.setMorphHandler(handler); | |
85 | - parser.setEngHandler(handler); | |
83 | + parser.setMorphHandler(handler); | |
84 | +/* parser.setEngHandler(handler); | |
86 | 85 | parser.setToonHandler(handler); |
87 | 86 | parser.setRigidHandler(handler); |
88 | 87 | parser.setJointHandler(handler);*/ |