1 /****************************************************************************************/
\r
4 /* Author: Mike Sandige */
\r
5 /* Description: Exports private BODY data structures for "friends". */
\r
7 /* The contents of this file are subject to the Genesis3D Public License */
\r
8 /* Version 1.01 (the "License"); you may not use this file except in */
\r
9 /* compliance with the License. You may obtain a copy of the License at */
\r
10 /* http://www.genesis3d.com */
\r
12 /* Software distributed under the License is distributed on an "AS IS" */
\r
13 /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See */
\r
14 /* the License for the specific language governing rights and limitations */
\r
15 /* under the License. */
\r
17 /* The Original Code is Genesis3D, released March 25, 1999. */
\r
18 /* Genesis3D Version 1.1 released November 15, 1999 */
\r
19 /* Copyright (C) 1999 WildTangent, Inc. All Rights Reserved */
\r
21 /****************************************************************************************/
\r
25 #include "basetype.h"
\r
26 #include "xform3d.h"
\r
28 #include "strblock.h"
\r
36 #define GE_BODY_INDEX_MAX (0xEFFF)
\r
38 #define GE_BODY_REALLY_BIG_NUMBER (9e9f) // bigger than any skin point
\r
40 #define GE_BODY_HIGHEST_LOD_MASK ( 1 << GE_BODY_HIGHEST_LOD )
\r
41 #define GE_BODY_BBOX_LOD_MASK ( 1 << GE_BODY_NUMBER_OF_LOD ) // bounding box mask
\r
44 typedef int16 geBody_Index;
\r
46 typedef struct geBody_XSkinVertex
\r
50 int8 LevelOfDetailMask;
\r
51 geBody_Index BoneIndex;
\r
52 } geBody_XSkinVertex;
\r
54 typedef struct geBody_Normal
\r
57 int8 LevelOfDetailMask;
\r
58 geBody_Index BoneIndex;
\r
61 typedef struct geBody_Bone
\r
63 geVec3d BoundingBoxMin;
\r
64 geVec3d BoundingBoxMax;
\r
65 geXForm3d AttachmentMatrix;
\r
66 geBody_Index ParentBoneIndex;
\r
69 typedef struct geBody_Triangle
\r
71 geBody_Index VtxIndex[3];
\r
72 geBody_Index NormalIndex[3];
\r
73 geBody_Index MaterialIndex;
\r
74 //geBody_Index FaceNormal;
\r
77 typedef struct geBody_TriangleList
\r
79 geBody_Index FaceCount;
\r
80 geBody_Triangle *FaceArray; // Sorted by MaterialIndex
\r
81 } geBody_TriangleList;
\r
83 typedef struct geBody_Material
\r
86 geFloat Red,Green,Blue;
\r
89 typedef struct geBody
\r
91 geVec3d BoundingBoxMin;
\r
92 geVec3d BoundingBoxMax;
\r
94 geBody_Index XSkinVertexCount;
\r
95 geBody_XSkinVertex *XSkinVertexArray; // Sorted by BoneIndex
\r
97 geBody_Index SkinNormalCount;
\r
98 geBody_Normal *SkinNormalArray;
\r
100 geBody_Index BoneCount;
\r
101 geBody_Bone *BoneArray;
\r
102 geStrBlock *BoneNames;
\r
104 geBody_Index MaterialCount;
\r
105 geBody_Material *MaterialArray;
\r
106 geStrBlock *MaterialNames;
\r
108 int LevelsOfDetail;
\r
109 geBody_TriangleList SkinFaces[GE_BODY_NUMBER_OF_LOD];
\r
114 #if defined(DEBUG) || !defined(NDEBUG)
\r
115 geBoolean GENESISCC geBody_SanityCheck(const geBody *B);
\r