• R/O
  • SSH

提交

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

TogaGemは、3D動画制作ツール、MikuMikuDance(MMD)で用いられる各種データファイルを読み書きするためのJavaライブラリです。旧TogaParserライブラリの資産は、TogaGemライブラリに吸収されました。


Commit MetaInfo

修订版d54d085465190b23453a7128d9976689b4a048f6 (tree)
时间2015-06-07 15:25:45
作者naz_o
Commiternaz_o

Log Message

PMX Parser till MorphParse

更改概述

差异

diff -r 86340100f23f -r d54d08546519 CHANGELOG.txt
--- a/CHANGELOG.txt Sun May 31 16:52:44 2015 +0900
+++ b/CHANGELOG.txt Sun Jun 07 15:25:45 2015 +0900
@@ -3,6 +3,9 @@
33
44 TogaGem 変更履歴
55
6+3.n3 (2015-06-07)
7+ ・PMX パーサーがモーフ読み込みまで一応の完成。
8+
69 3.n2 (2015-05-29)
710 ・PMX パーサーがボーン読み込みまで一応の完成。
811
diff -r 86340100f23f -r d54d08546519 pom.xml
--- a/pom.xml Sun May 31 16:52:44 2015 +0900
+++ b/pom.xml Sun Jun 07 15:25:45 2015 +0900
@@ -16,7 +16,7 @@
1616 <groupId>jp.sourceforge.mikutoga</groupId>
1717 <artifactId>togagem</artifactId>
1818
19- <version>3.n2</version>
19+ <version>3.n3</version>
2020
2121 <packaging>jar</packaging>
2222 <name>TogaGem</name>
diff -r 86340100f23f -r d54d08546519 src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxMenuHandler.java
--- a/src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxMenuHandler.java Sun May 31 16:52:44 2015 +0900
+++ b/src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxMenuHandler.java Sun Jun 07 15:25:45 2015 +0900
@@ -22,6 +22,9 @@
2222 /** ボーングループ内訳抽出ループ。 */
2323 ParseStage GROUPEDBONE_LIST = new ParseStage();
2424
25+ /** モーフ出現順抽出ループ。 */
26+ ParseStage MORPHORDER_LIST = new ParseStage();
27+
2528 /**
2629 * ボーングループ名定義の通知を受け取る。
2730 * <p>{@link #BONEGROUP_LIST}ループの構成要素。
@@ -42,4 +45,12 @@
4245 void pmxGroupedBoneInfo(int boneId, int groupId)
4346 throws MmdFormatException;
4447
48+ /**
49+ * 各モーフ種別内のGUI表示順の通知を受け取る。
50+ * <p>{@link #MORPHORDER_LIST}ループの構成要素
51+ * @param morphId モーフ通し番号。同一モーフ種別内の大小関係のみ意味がある。
52+ * @throws MmdFormatException 不正フォーマットによる
53+ * パース処理の中断をパーサに指示
54+ */
55+ void pmxMorphOrderInfo(int morphId) throws MmdFormatException;
4556 }
diff -r 86340100f23f -r d54d08546519 src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxMorphHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxMorphHandler.java Sun Jun 07 15:25:45 2015 +0900
@@ -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+}
diff -r 86340100f23f -r d54d08546519 src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxParserBase.java
--- a/src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxParserBase.java Sun May 31 16:52:44 2015 +0900
+++ b/src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxParserBase.java Sun Jun 07 15:25:45 2015 +0900
@@ -46,14 +46,13 @@
4646 static{
4747 }
4848
49-
5049 private PmxBasicHandler basicHandler = PmxUnifiedHandler.EMPTY;
5150 private PmxVertexHandler vertexHandler = PmxUnifiedHandler.EMPTY;
5251 private PmxFaceHandler faceHandler = PmxUnifiedHandler.EMPTY;
5352 private PmxMaterialHandler materialHandler = PmxUnifiedHandler.EMPTY;
5453 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;
5756 private PmxRigidHandler rigidHandler = PmxUnifiedHandler.EMPTY;
5857 private PmxJointHandler jointHandler = PmxUnifiedHandler.EMPTY;*/
5958
@@ -171,14 +170,14 @@
171170 * モーフ情報通知ハンドラを登録する。
172171 * @param handler ハンドラ
173172 */
174-/* public void setMorphHandler(PmxMorphHandler handler){
173+ public void setMorphHandler(PmxMorphHandler handler){
175174 if(handler == null){
176175 this.morphHandler = PmxUnifiedHandler.EMPTY;
177176 }else{
178177 this.morphHandler = handler;
179178 }
180179 return;
181- }*/
180+ }
182181
183182 /**
184183 * パースによって得られたボーン数を返す。
@@ -308,9 +307,9 @@
308307 parseFaceList();
309308 parseMaterialList();
310309 parseBoneList();
311-/* parseIKList();
310+// parseIKList();
312311 parseMorphList();
313- parseMorphOrderList();
312+/* parseMorphOrderList();
314313 parseBoneGroupList();
315314 parseGroupedBoneList();*/
316315 }
@@ -647,54 +646,123 @@
647646 * @throws IOException IOエラー
648647 * @throws MmdFormatException フォーマットエラー
649648 */
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);
655653
656654 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);
661659
662- this.morphHandler.pmdMorphInfo(morphName, morphType);
660+ byte morphType = parseByte();
661+ int numOfOffsets = parseLeInt();
662+ this.morphHandler.pmxMorphElementListHeader(morphType, numOfOffsets);
663663
664- parseMorphVertexList(vertexCount);
664+ parseMorphElementList(morphType,numOfOffsets);
665665
666- this.morphHandler.loopNext(PmdMorphHandler.MORPH_LIST);
666+ this.morphHandler.loopNext(PmxMorphHandler.MORPH_LIST);
667667 }
668668
669- this.morphHandler.loopEnd(PmdMorphHandler.MORPH_LIST);
669+ this.morphHandler.loopEnd(PmxMorphHandler.MORPH_LIST);
670670
671- }*/
671+ }
672672
673673 /**
674- * モーフ形状のパースと通知。
675- * @param vertexCount 頂点数
674+ * モーフ変形要素リストのパースと通知。
675+ * @param elementCount 要素数
676676 * @throws IOException IOエラー
677677 * @throws MmdFormatException フォーマットエラー
678678 */
679-/* private void parseMorphVertexList(int vertexCount)
679+ private void parseMorphElementList(byte morphType, int elementCount)
680680 throws IOException, MmdFormatException{
681- this.morphHandler.loopStart(PmdMorphHandler.MORPHVERTEX_LIST,
682- vertexCount );
681+ this.morphHandler.loopStart(PmxMorphHandler.MORPH_ELEMENT_LIST,
682+ elementCount);
683683
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);
690719
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);
693725
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);
695731
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+ }
698766
699767 /**
700768 * モーフGUI表示順のパースと通知。
diff -r 86340100f23f -r d54d08546519 src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxUnifiedHandler.java
--- a/src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxUnifiedHandler.java Sun May 31 16:52:44 2015 +0900
+++ b/src/main/java/jp/sfjp/mikutoga/pmx/parser/PmxUnifiedHandler.java Sun Jun 07 15:25:45 2015 +0900
@@ -17,8 +17,8 @@
1717 PmxVertexHandler,
1818 PmxFaceHandler,
1919 PmxMaterialHandler,
20- PmxBoneHandler/*,
21- PmxMorphHandler,
20+ PmxBoneHandler,
21+ PmxMorphHandler/*,
2222 PmxMenuHandler,
2323 PmxRigidHandler,
2424 PmxJointHandler*/ {
diff -r 86340100f23f -r d54d08546519 src/test/java/sample/pmx/DummyHandler.java
--- a/src/test/java/sample/pmx/DummyHandler.java Sun May 31 16:52:44 2015 +0900
+++ b/src/test/java/sample/pmx/DummyHandler.java Sun Jun 07 15:25:45 2015 +0900
@@ -7,6 +7,7 @@
77
88 package sample.pmx;
99
10+import jp.sfjp.mikutoga.bin.parser.MmdFormatException;
1011 import jp.sfjp.mikutoga.bin.parser.ParseStage;
1112 import jp.sfjp.mikutoga.pmx.parser.PmxBoneHandler;
1213 import jp.sfjp.mikutoga.pmx.parser.PmxFaceHandler;
@@ -95,23 +96,23 @@
9596
9697 @Override
9798 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);
99100 }
100101
101102 @Override
102103 public void pmxVertexNormal(float xVec, float yVec, float zVec){
103- System.out.print("," + xVec + "," + yVec + "," + zVec);
104+// System.out.print("," + xVec + "," + yVec + "," + zVec);
104105 }
105106
106107 @Override
107108 public void pmxVertexUV(float uVal, float vVal){
108- System.out.println("," + uVal + "," + vVal);
109+// System.out.println("," + uVal + "," + vVal);
109110 }
110111
111112 @Override
112113 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);
115116 }
116117
117118 @Override
@@ -134,8 +135,8 @@
134135 public void pmxFaceTriangle(int vertexId_1,
135136 int vertexId_2,
136137 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);
139140 }
140141
141142 @Override
@@ -258,4 +259,76 @@
258259 }
259260 }
260261 }
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+ }
261334 }
diff -r 86340100f23f -r d54d08546519 src/test/java/sample/pmx/DummyMain.java
--- a/src/test/java/sample/pmx/DummyMain.java Sun May 31 16:52:44 2015 +0900
+++ b/src/test/java/sample/pmx/DummyMain.java Sun Jun 07 15:25:45 2015 +0900
@@ -27,8 +27,7 @@
2727 private static final DummyHandler handler = new DummyHandler();
2828
2929 static{
30- PMXFILE =
31- "test.pmx";
30+ PMXFILE ="test.pmx";
3231 }
3332
3433 /**
@@ -81,8 +80,8 @@
8180 parser.setFaceHandler(handler);
8281 parser.setMaterialHandler(handler);
8382 parser.setBoneHandler(handler);
84-/* parser.setMorphHandler(handler);
85- parser.setEngHandler(handler);
83+ parser.setMorphHandler(handler);
84+/* parser.setEngHandler(handler);
8685 parser.setToonHandler(handler);
8786 parser.setRigidHandler(handler);
8887 parser.setJointHandler(handler);*/