summaryrefslogtreecommitdiffhomepage
path: root/src/raylib.h
diff options
context:
space:
mode:
authorRay <[email protected]>2019-04-04 13:33:54 +0200
committerRay <[email protected]>2019-04-04 13:33:54 +0200
commitd89d24c5e8930c18a93a6403e26914a9e2b23b84 (patch)
tree6718b5db7b89ddb8d1f01845f62852fb975d7311 /src/raylib.h
parent22dece2935ae0fcd67f0d040bdb3f95318495908 (diff)
downloadraylib-d89d24c5e8930c18a93a6403e26914a9e2b23b84.tar.gz
raylib-d89d24c5e8930c18a93a6403e26914a9e2b23b84.zip
BIG UPDATE: Support model animations!
Diffstat (limited to 'src/raylib.h')
-rw-r--r--src/raylib.h45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 085f36f6..9607191b 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -307,10 +307,10 @@ typedef struct Mesh {
unsigned short *indices;// Vertex indices (in case vertex data comes indexed)
// Animation vertex data
- float *baseVertices; // Vertex base position (required to apply bones transformations)
- float *baseNormals; // Vertex base normals (required to apply bones transformations)
- float *weightBias; // Vertex weight bias
- int *weightId; // Vertex weight id
+ float *animVertices; // Animated vertex positions (after bones transformations)
+ float *animNormals; // Animated normals (after bones transformations)
+ int *boneIds; // Vertex bone ids, up to 4 bones influence by vertex (skinning)
+ float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning)
// OpenGL identifiers
unsigned int vaoId; // OpenGL Vertex Array Object id
@@ -337,6 +337,19 @@ typedef struct Material {
float *params; // Material generic parameters (if required)
} Material;
+// Transformation properties
+typedef struct Transform {
+ Vector3 translation; // Translation
+ Quaternion rotation; // Rotation
+ Vector3 scale; // Scale
+} Transform;
+
+// Bone information
+typedef struct BoneInfo {
+ char name[32]; // Bone name
+ int parent; // Bone parent
+} BoneInfo;
+
// Model type
typedef struct Model {
Matrix transform; // Local transform matrix
@@ -346,10 +359,23 @@ typedef struct Model {
int materialCount; // Number of materials
Material *materials; // Materials array
-
int *meshMaterial; // Mesh material number
+
+ // Animation data
+ int boneCount; // Number of bones
+ BoneInfo *bones; // Bones information (skeleton)
+ Transform *bindPose; // Bones base transformation (pose)
} Model;
+// Model animation
+typedef struct ModelAnimation {
+ int boneCount; // Number of bones
+ BoneInfo *bones; // Bones information (skeleton)
+
+ int frameCount; // Number of animation frames
+ Transform **framePoses; // Poses array by frame
+} ModelAnimation;
+
// Ray type (useful for raycast)
typedef struct Ray {
Vector3 position; // Ray position (origin)
@@ -1228,17 +1254,16 @@ RLAPI void DrawGizmo(Vector3 position);
// Model loading/unloading functions
RLAPI Model LoadModel(const char *fileName); // Load model from files (meshes and materials)
RLAPI Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh
+//RLAPI void LoadModelAnimations(const char fileName, ModelAnimation *anims, int *animsCount); // Load model animations from file
+//RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose
RLAPI void UnloadModel(Model model); // Unload model from memory (RAM and/or VRAM)
-// Mesh loading/unloading functions
-RLAPI Mesh LoadMesh(const char *fileName); // Load mesh from file
-RLAPI void UnloadMesh(Mesh *mesh); // Unload mesh from memory (RAM and/or VRAM)
-RLAPI void ExportMesh(Mesh mesh, const char *fileName); // Export mesh data to file
-
// Mesh manipulation functions
RLAPI BoundingBox MeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits
RLAPI void MeshTangents(Mesh *mesh); // Compute mesh tangents
RLAPI void MeshBinormals(Mesh *mesh); // Compute mesh binormals
+RLAPI void UnloadMesh(Mesh *mesh); // Unload mesh from memory (RAM and/or VRAM)
+RLAPI void ExportMesh(Mesh mesh, const char *fileName); // Export mesh data to file
// Mesh generation functions
RLAPI Mesh GenMeshPoly(int sides, float radius); // Generate polygonal mesh