OSDN Git Service

16f80f90c707cec0edb8e4a1cada7f9f9ce5603b
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / parser / pmd / PmdShapeHandler.java
1 /*
2  * PMD shape information handler
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.parser.pmd;
9
10 import jp.sourceforge.mikutoga.parser.LoopHandler;
11 import jp.sourceforge.mikutoga.parser.MmdFormatException;
12 import jp.sourceforge.mikutoga.parser.ParseStage;
13
14 /**
15  * PMDモデルの各種形状(頂点、面)の通知用ハンドラ。
16  * 0から始まる頂点ID順に頂点は出現する。
17  * 0から始まる面ID順に面は出現する。
18  */
19 public interface PmdShapeHandler extends LoopHandler {
20
21     /**
22      * モデル形状パースステージ。
23      */
24     class PmdShapeStage extends ParseStage{
25         /** コンストラクタ。 */
26         PmdShapeStage(){ super(); return; }
27     }
28
29     /** 頂点抽出ループ。 */
30     PmdShapeStage VERTEX_LIST = new PmdShapeStage();
31     /** 面抽出ループ。 */
32     PmdShapeStage SURFACE_LIST = new PmdShapeStage();
33
34     /**
35      * 頂点の座標の通知を受け取る。
36      * {@link #VERTEX_LIST}ループの構成要素
37      * @param xPos X座標
38      * @param yPos Y座標
39      * @param zPos Z座標
40      * @throws MmdFormatException 不正フォーマットによる
41      * パース処理の中断をパーサに指示
42      */
43     void pmdVertexPosition(float xPos, float yPos, float zPos)
44             throws MmdFormatException;
45
46     /**
47      * 頂点の法線情報の通知を受け取る。
48      * {@link #VERTEX_LIST}ループの構成要素
49      * ※単位ベクトル化必須?
50      * @param xVec 法線ベクトルX成分
51      * @param yVec 法線ベクトルY成分
52      * @param zVec 法線ベクトルZ成分
53      * @throws MmdFormatException 不正フォーマットによる
54      * パース処理の中断をパーサに指示
55      */
56     void pmdVertexNormal(float xVec, float yVec, float zVec)
57             throws MmdFormatException;
58
59     /**
60      * 頂点のUVマッピング情報の通知を受け取る。
61      * (頂点UV)
62      * {@link #VERTEX_LIST}ループの構成要素
63      * @param uVal テクスチャのU座標
64      * @param vVal テクスチャのV座標
65      * @throws MmdFormatException 不正フォーマットによる
66      * パース処理の中断をパーサに指示
67      */
68     void pmdVertexUV(float uVal, float vVal )
69             throws MmdFormatException;
70
71     /**
72      * 頂点のボーン間ウェイトバランス情報の通知を受け取る。
73      * {@link #VERTEX_LIST}ループの構成要素
74      * @param boneId1 ボーンその1識別ID
75      * @param boneId2 ボーンその2識別ID
76      * @param weightForB1 ボーンその1への影響度。0(min)~100(max)
77      * ボーンその2への影響度は100からの引き算で求める。
78      * @throws MmdFormatException 不正フォーマットによる
79      * パース処理の中断をパーサに指示
80      */
81     void pmdVertexWeight(int boneId1, int boneId2, int weightForB1)
82             throws MmdFormatException;
83
84     /**
85      * 頂点のエッジ表現情報の通知を受け取る。
86      * 材質単位でのエッジ表現指定に優先される。
87      * {@link #VERTEX_LIST}ループの構成要素
88      * @param hideEdge エッジ無効ならtrue
89      * @throws MmdFormatException 不正フォーマットによる
90      * パース処理の中断をパーサに指示
91      */
92     void pmdVertexEdge(boolean hideEdge)
93             throws MmdFormatException;
94
95     /**
96      * 3つの頂点から構成される面情報の通知を受け取る。
97      * {@link #SURFACE_LIST}ループの構成要素
98      * @param vertexId1 頂点IDその1
99      * @param vertexId2 頂点IDその1
100      * @param vertexId3 頂点IDその1
101      * @throws MmdFormatException 不正フォーマットによる
102      * パース処理の中断をパーサに指示
103      */
104     void pmdSurfaceTriangle(int vertexId1, int vertexId2, int vertexId3)
105             throws MmdFormatException;
106
107 }