OSDN Git Service

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