3 * MMD
\82Ì
\83\82\83f
\83\8b\83f
\81[
\83^
\81B
\83o
\83C
\83i
\83\8a\8c`
\8e®
\82Å
\82Ð
\82Æ
\82Â
\82Ì
\92¸
\93_
\82ª
\8dÅ
\91å
\82Q
\82Â
\82Ü
\82Å
\82Ì
\83{
\81[
\83\93\82Ì
4 *
\83E
\83F
\83C
\83g
\82ð
\95Û
\8e\9d\82·
\82é
\92P
\88ê
\82Ì
\92¸
\93_
\94z
\97ñ
\82Æ
\92¸
\93_
\83C
\83\93\83f
\83b
\83N
\83X
\94z
\97ñ
\82ð
\82à
\82Â
\81B
\96Ê
\82Í
5 *
\8eO
\8ap
\8c`
\82Ì
\82Ý
\81B
6 *
\82Ü
\82½
\95\
\8fî
\83\82\81[
\83t
\83B
\83\93\83O
\8fî
\95ñ
\81A
\95¨
\97\9d\89\89\8eZ
\8cü
\82¯
\82Ì
\8d\84\91Ì
\8fî
\95ñ
\82Æ
\8dS
\91©
\8fî
\95ñ
\82È
\82Ç
\82ð
\82à
\82Â
\81B
18 *
\92¸
\93_
\96@
\90ü
\82ª
\8ai
\94[
\8dÏ
\82Ý
\81B
20 *
\83\81\83b
\83V
\83\85
21 *
\8dÅ
\91å
\92¸
\93_
\90\94
22 *
\8dÅ
\91å
\8eO
\8ap
\8c`
\90\94
24 *
\97 \96Ê
\82Ì
\88µ
\82¢
25 *
\83I
\83\8a\83W
\83i
\83\8b\82Å
\82Í
\83o
\83b
\83N
\83J
\83\8a\83\93\83O
\82ð
\82µ
\82Ä
\82¢
\82È
\82¢
\82Ì
\82Å
\82â
\82é
\8fê
\8d\87\82Í
\83\82\83f
\83\8b\8cÂ
\95Ê
\82É
26 *
\91Î
\89\9e\82ª
\95K
\97v
\81B
28 *
\8eQ
\8dl
\83T
\83C
\83g
29 * http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4
32 #ifndef MESH_IO_PMD_H_INCLUDED
33 #define MESH_IO_PMD_H_INCLUDED
41 #include <boost/array.hpp>
52 ////////////////////////////////////////////////////////////
54 ////////////////////////////////////////////////////////////
59 //!
\96@
\90ü
\83x
\83N
\83g
\83\8b
60 meshio::Vector3 normal;
61 //!
\83e
\83N
\83X
\83`
\83\83UV
63 //!
\83u
\83\8c\83\93\83f
\83B
\83\93\83O
\83{
\81[
\83\931
65 //!
\83u
\83\8c\83\93\83f
\83B
\83\93\83O
\83{
\81[
\83\932
67 //!
\83E
\83F
\83C
\83g[0 - 100]
68 unsigned char weight0;
70 unsigned char edge_flag;
73 inline std::ostream &operator<<(std::ostream &os, const Vertex &rhs)
78 << " normal:" << rhs.normal
80 << " bone0:" << rhs.bone0
81 << " bone1:" << rhs.bone1
82 << " weight0:" << (int)rhs.weight0
83 << " edge_flag:" << (int)rhs.edge_flag
90 ////////////////////////////////////////////////////////////
92 ////////////////////////////////////////////////////////////
96 meshio::fRGBA diffuse;
100 meshio::fRGB specular;
102 meshio::fRGB ambient;
103 //!
\83g
\83D
\81[
\83\93\83e
\83N
\83X
\83`
\83\83
104 unsigned char toon_index;
107 //!
\96Ê
\92¸
\93_
\90\94
108 unsigned int vertex_count;
109 //!
\83e
\83N
\83X
\83`
\83\83
110 meshio::fixed_string<20> texture;
113 inline std::ostream &operator<<(std::ostream &os,
118 << " diffuse:" << rhs.diffuse
119 << " toon_index:" << (int)rhs.toon_index
120 << " flag:" << (int)rhs.flag
121 << " vertex_count:" << rhs.vertex_count
122 << " texture:" << rhs.texture
129 ////////////////////////////////////////////////////////////
131 ////////////////////////////////////////////////////////////
132 //!
\83{
\81[
\83\93\82Ì
\8eí
\97Þ
137 //
\89ñ
\93]
\82Æ
\88Ú
\93®
145 //
\89ñ
\93]
\89e
\8b¿
\89º
146 BONE_ROTATE_INFLUENCED,
159 meshio::fixed_string<20> name;
160 //!
\90e
\83{
\81[
\83\93
161 unsigned short parent_index;
162 //!
\8eq
\83{
\81[
\83\93
163 unsigned short tail_index;
164 //!
\83{
\81[
\83\93\8eí
\97Þ
166 //!
\89e
\8b¿IK
\83{
\81[
\83\93
167 unsigned short ik_index;
168 //
\83{
\81[
\83\93\8dÀ
\95W
171 meshio::fixed_string<20> english_name;
172 //!
\83{
\81[
\83\93\8aK
\91w
\8d\
\92z
\97p
174 meshio::Vector3 tail;
175 std::vector<Bone*> children;
176 unsigned short index;
179 : parent_index(-1), tail_index(-1), type(BONE_UNKNOWN), ik_index(-1), parent(0), index(-1)
183 inline std::ostream &operator<<(std::ostream &os,
188 << '"' << rhs.name << '"'
195 ////////////////////////////////////////////////////////////
197 ////////////////////////////////////////////////////////////
200 //! IK(IK
\83^
\81[
\83Q
\83b
\83g)
201 unsigned short index;
202 //! Target(
\83G
\83t
\83F
\83N
\83^
\81[)
203 unsigned short target;
204 //!
\83G
\83t
\83F
\83N
\83^
\82É
\98A
\93®
\82·
\82é
\83{
\81[
\83\93\90\94
205 unsigned char length;
206 //! IK
\92l1
\81BCCD-IK
\8e\8e\8ds
\89ñ
\90\94
207 unsigned short iterations;
208 //! IK
\92l2
\81BCCD-IK
\8e\8e\8ds
\88ê
\89ñ
\95Ó
\82è
\82Ì
\89e
\8b¿
\93x
210 //!
\83G
\83t
\83F
\83N
\83^
\82É
\98A
\93®
\82·
\82é
\83{
\81[
\83\93(
\8aî
\96{
\93I
\82É
\90e
\83{
\81[
\83\93\82É
\91k
\82é)
211 std::vector<unsigned short> children;
214 inline std::ostream &operator<<(std::ostream &os, const IK &rhs)
224 ////////////////////////////////////////////////////////////
226 ////////////////////////////////////////////////////////////
227 //!
\95\
\8fî
\82Ì
\8eí
\97Þ
230 //!
\83x
\81[
\83X
\95\
\8fî
244 meshio::fixed_string<20> name;
245 //!
\8eg
\97p
\82·
\82é
\92¸
\93_
\90\94
246 unsigned int vertex_count;
250 std::vector<unsigned int> indices;
252 std::vector<meshio::Vector3> pos_list;
254 meshio::fixed_string<20> english_name;
257 inline std::ostream &operator<<(std::ostream &os, const Morph &rhs)
261 << '"' << rhs.name << '"'
268 ////////////////////////////////////////////////////////////
269 //!
\83{
\81[
\83\93\95\
\8e¦
\98g
270 ////////////////////////////////////////////////////////////
273 meshio::fixed_string<50> name;
274 meshio::fixed_string<50> english_name;
277 ////////////////////////////////////////////////////////////
279 ////////////////////////////////////////////////////////////
287 //!
\83J
\83v
\83Z
\83\8b
290 //!
\8d\84\91Ì
\83^
\83C
\83v
293 //!
\83{
\81[
\83\93\82Æ
\93¯
\82¶
\93®
\82«
294 RIGIDBODY_KINEMATICS=0,
295 //!
\95¨
\97\9d\89\89\8eZ
297 //!
\95¨
\97\9d\89\89\8eZ
\8c\8b\89Ê
\82ð
\83{
\81[
\83\93\82É
\94½
\89f
\82·
\82é
298 RIGIDBODY_PHYSICS_WITH_BONE,
304 meshio::fixed_string<20> name;
305 //!
\8aÖ
\98A
\83{
\81[
\83\93(
\83{
\81[
\83\93\92Ç
\8f]
\82Æ
\83{
\81[
\83\93\88Ê
\92u
\8d\87\82í
\82¹
\82Å
\95K
\97v)
306 unsigned short boneIndex;
307 //!
\83O
\83\8b\81[
\83v
309 //!
\94ñ
\8fÕ
\93Ë
\83O
\83\8b\81[
\83v
310 unsigned short target;
312 SHAPE_TYPE shapeType;
318 meshio::Vector3 position;
319 meshio::Vector3 rotation;
322 //!
\95¨
\97\9d\89\89\8eZ
\83p
\83\89\83\81\81[
\83^(bullet)
324 float angularDamping;
327 //!
\8d\84\91Ì
\83^
\83C
\83v
328 PROCESS_TYPE processType;
331 //! Joint(
\95¨
\97\9d\89\89\8eZ
\82Å
\82ÌJoint
\82ÆConstraint
\82Í
\93¯
\82¶
\88Ó
\96¡)
335 meshio::fixed_string<20> name;
336 //!
\90Ú
\91±
\8d\84\91ÌA
338 //!
\90Ú
\91±
\8d\84\91ÌB
345 meshio::Vector3 constraintPosMin;
346 meshio::Vector3 constraintPosMax;
348 meshio::Vector3 constraintRotMin;
349 meshio::Vector3 constraintRotMax;
351 meshio::Vector3 springPos;
352 meshio::Vector3 springRot;
360 meshio::fixed_string<20> name;
361 meshio::fixed_string<256> comment;
362 std::vector<Vertex> vertices;
363 std::vector<unsigned short> indices;
364 std::vector<Material> materials;
365 std::vector<Bone> bones;
366 std::vector<IK> ik_list;
367 std::vector<Morph> morph_list;
368 std::vector<unsigned short> face_list;
369 std::vector<BoneGroup> bone_group_list;
370 std::vector<std::pair<unsigned short, unsigned char> > bone_display_list;
371 std::array<meshio::fixed_string<100>, 10> toon_textures;
372 std::vector<RigidBody> rigidbodies;
373 std::vector<Constraint> constraints;
375 meshio::fixed_string<20> english_name;
376 meshio::fixed_string<256> english_comment;
379 bool read(const char *path);
380 bool write(const char *path);
381 bool read(meshio::binary::IReader &reader);
382 bool write(meshio::binary::IWriter &writer);
385 inline std::ostream &operator<<(std::ostream &os, const IO &rhs)
388 << "<PMD " << rhs.name << std::endl
389 << rhs.comment << std::endl
390 << "[vertices] " << rhs.vertices.size() << std::endl
391 << "[indices] " << rhs.indices.size() << std::endl
392 << "[materials] " << rhs.materials.size() << std::endl
395 std::copy(rhs.materials.begin(), rhs.materials.end(),
396 std::ostream_iterator<Material>(os, ""));
399 << "[bones] " << rhs.bones.size() << std::endl
401 std::copy(rhs.bones.begin(), rhs.bones.end(),
402 std::ostream_iterator<Bone>(os, ""));
405 << "[ik] " << rhs.ik_list.size() << std::endl
407 std::copy(rhs.ik_list.begin(), rhs.ik_list.end(),
408 std::ostream_iterator<IK>(os, ""));
411 << "[morph] " << rhs.morph_list.size() << std::endl
413 std::copy(rhs.morph_list.begin(), rhs.morph_list.end(),
414 std::ostream_iterator<Morph>(os, ""));
426 } // namespace meshio
428 #endif // MESH_IO_PMD_H_INCLUDED