7 #ifndef CAFU_HL2_MDL_FILE_FORMAT_HPP_INCLUDED
8 #define CAFU_HL2_MDL_FILE_FORMAT_HPP_INCLUDED
10 #include "Loader_mdl_hl2_vvd.hpp"
11 #include "Loader_mdl_hl2_vtx.hpp"
12 #include "Loader_mdl_hl2_anim.hpp"
13 #include "Math3D/Angles.hpp"
14 #include "Math3D/Quaternion.hpp"
19 using namespace cf::math;
33 uint32_t FlexesOffset;
35 uint32_t MaterialType;
36 uint32_t MaterialParam;
42 uint32_t NumLODVertices[HL2mdl_MAX_NUM_LODS];
52 std::ostream& print(std::ostream& os,
const char* indent)
const;
66 uint32_t MeshesOffset;
72 uint32_t NumAttachments;
73 uint32_t AttachmentsOffset;
76 uint32_t EyeballsOffset;
81 #if UINTPTR_MAX == UINT32_MAX
92 return (
StudioMeshT*)(((uint8_t*)
this) + MeshesOffset);
99 return m_Vertices ? m_Vertices + (VertOffset /
sizeof(
StudioVertexT)) : NULL;
102 const Vector4D* GetTangents()
const
104 assert(TangentsOffset %
sizeof(Vector4D) == 0);
106 return m_Tangents ? m_Tangents + (TangentsOffset /
sizeof(Vector4D)) : NULL;
109 std::ostream& print(std::ostream& os,
const char* indent)
const;
113 inline const StudioVertexT* StudioMeshT::GetVertices()
const
115 return GetModel()->GetVertices() + VerticesOffset;
118 inline const Vector4D* StudioMeshT::GetTangents()
const
120 return GetModel()->GetTangents() + VerticesOffset;
140 uint32_t ModelsOffset;
145 const char* GetName()
const {
return ((
char*)
this) + NameOffset; }
148 std::ostream& print(std::ostream& os,
const char* indent)
const;
167 return Vector3fT(m[0][0]*v.
x + m[0][1]*v.
y + m[0][2]*v.
z + m[0][3],
168 m[1][0]*v.
x + m[1][1]*v.
y + m[1][2]*v.
z + m[1][3],
169 m[2][0]*v.
x + m[2][1]*v.
y + m[2][2]*v.
z + m[2][3]);
185 int32_t BoneController[6];
199 uint32_t PhysicsBone;
200 uint32_t SurfacePropNameOffset;
207 const char* GetName()
const {
return ((
char*)
this) + NameOffset; }
208 const char* GetSurfacePropName()
const {
return ((
char*)
this) + SurfacePropNameOffset; }
210 std::ostream& print(std::ostream& os,
const char* indent)
const;
224 const char* GetName()
const {
return ((
char*)
this) + NameOffset; }
226 std::ostream& print(std::ostream& os,
const char* indent)
const;
256 uint32_t NumHitboxSets;
257 uint32_t HitboxSetsOffset;
260 uint32_t LocalAnimDescsOffset;
263 uint32_t LocalSequDescsOffset;
265 uint32_t ActivityListVersion;
266 uint32_t EventsIndexed;
269 uint32_t TexturesOffset;
272 uint32_t TexturePathsOffset;
274 uint32_t NumSkinRefs;
275 uint32_t NumSkinFamilies;
276 uint32_t SkinsOffset;
281 uint32_t NumLocalAttachments;
282 uint32_t LocalAttachmentsOffset;
285 uint32_t LocalNodeOffset;
286 uint32_t LocalNodenameOffset;
288 uint32_t NumFlexDesc;
289 uint32_t FlexDescOffset;
291 uint32_t NumFlexControllers;
292 uint32_t FlexControllerOffset;
294 uint32_t NumFlexRules;
295 uint32_t FlexRuleOffset;
297 uint32_t NumIKChains;
298 uint32_t IKChainOffset;
301 uint32_t MouthOffset;
303 uint32_t NumLocalPoseParameters;
304 uint32_t LocalPoseParamOffset;
306 uint32_t SurfacePropOffset;
308 uint32_t KeyValueOffset;
309 uint32_t KeyValueSize;
311 uint32_t NumLocalIKAutoPlayLocks;
312 uint32_t LocalIKAutoPlayLockOffset;
318 uint32_t IncludeModelOffset;
326 const StudioSequDescT* GetLocalSequDescs()
const {
return (StudioSequDescT*)(((uint8_t*)
this) + LocalSequDescsOffset); };
328 const StudioAnimDescT* GetAnimDesc(uint32_t i)
const
330 if (NumIncludeModels == 0)
return GetLocalAnimDescs() + i;
338 const char* GetTexturePath(uint32_t i)
const {
return ((
char*)
this) + *((
int*)(((uint8_t*)
this) + TexturePathsOffset) + i); }
339 const uint16_t* GetSkinRefs()
const {
return (uint16_t*)(((uint8_t*)
this) + SkinsOffset); }
const Vector4D * m_Tangents
= VertexHeader->GetTangents();
Definition: Loader_mdl_hl2_mdl.hpp:79
This class describes a body part.
Definition: Loader_mdl_hl2_mdl.hpp:135
uint32_t VerticesOffset
The first vertex of the mesh, relative to the first vertex of the model.
Definition: Loader_mdl_hl2_mdl.hpp:30
uint32_t MeshID
A unique ID for this mesh.
Definition: Loader_mdl_hl2_mdl.hpp:38
Vector3fT Mul1(const Vector3fT &v) const
Computes M*v, where M is this matrix.
Definition: Loader_mdl_hl2_mdl.hpp:165
uint32_t Base
For the i-th body ("body variant"), use from this body part the (i / Base) % NumModels-th model...
Definition: Loader_mdl_hl2_mdl.hpp:139
Definition: Loader_mdl_hl2_vvd.hpp:29
Definition: Loader_mdl_hl1.h:175
int32_t ModelOffset
Points back to the parent StudioModelT. Usually negative.
Definition: Loader_mdl_hl2_mdl.hpp:27
uint32_t TangentsOffset
As VertOffset, but for tangents.
Definition: Loader_mdl_hl2_mdl.hpp:70
Definition: Loader_mdl_hl2_mdl.hpp:214
T y
The y-component of this vector.
Definition: Vector3.hpp:41
uint32_t Material
See LoaderHL2mdlT::Load(Skins, ...) for details!
Definition: Loader_mdl_hl2_mdl.hpp:26
Definition: Loader_mdl_hl1.h:185
Definition: Loader_mdl_hl2_anim.hpp:136
AnglesfT Angles
The bone's rotation in the default pose (Euler angles in radians, not degrees).
Definition: Loader_mdl_hl2_mdl.hpp:189
This class describes a mesh of a model.
Definition: Loader_mdl_hl2_mdl.hpp:24
uint32_t NumVertices
The number of unique vertices (along with normals, tangents and texcoords) in this mesh...
Definition: Loader_mdl_hl2_mdl.hpp:29
uint32_t VertOffset
The byte-offset into the VVD file to the first vertex. See GetVertices() for details.
Definition: Loader_mdl_hl2_mdl.hpp:69
uint32_t NumVertices
The number of unique vertices (along with normals, tangents and texcoords) in this mesh...
Definition: Loader_mdl_hl2_mdl.hpp:68
uint32_t NumMeshes
LOD is implemented at mesh level, not at model level.
Definition: Loader_mdl_hl2_mdl.hpp:65
Definition: Loader_mdl_hl2_vvd.hpp:43
const StudioVertexT * m_Vertices
= VertexHeader->GetVertices();
Definition: Loader_mdl_hl2_mdl.hpp:78
Vector3fT PosScale
Compression scale.
Definition: Loader_mdl_hl2_mdl.hpp:191
QuaternionfT Quat
The bone's orientation in the default pose.
Definition: Loader_mdl_hl2_mdl.hpp:188
uint32_t NumFlexes
Flexes are for animating vertices (unrelated to / independent from bones).
Definition: Loader_mdl_hl2_mdl.hpp:32
T z
The z-component of this vector.
Definition: Vector3.hpp:42
Definition: Loader_mdl_hl1.h:194
Matrix3x4fT PoseToBone
Transforms a (default pose's) mesh vertex from Model Space to Bone Space.
Definition: Loader_mdl_hl2_mdl.hpp:194
T x
The x-component of this vector.
Definition: Vector3.hpp:40
Vector3fT Pos
The bone's position in the default pose.
Definition: Loader_mdl_hl2_mdl.hpp:187
Used in StudioBoneT.
Definition: Loader_mdl_hl2_mdl.hpp:153
This class describes a model of a body part.
Definition: Loader_mdl_hl2_mdl.hpp:57
This class describes a bone.
Definition: Loader_mdl_hl2_mdl.hpp:181