More Model management functions, BoneInfo and Transform.
This commit is contained in:
107
API.md
107
API.md
@@ -221,6 +221,18 @@ GlyphInfo, font characters glyphs info
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> BoneInfo = { name = string[32], parent = int }
|
||||||
|
|
||||||
|
Bone, skeletal animation bone
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> Transform = { translation = Vector3, rotation = Quaternion, scale = Vector3 }
|
||||||
|
|
||||||
|
Transform, vertex transformation data
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> Wave = Userdata
|
> Wave = Userdata
|
||||||
|
|
||||||
Wave, audio wave data
|
Wave, audio wave data
|
||||||
@@ -2977,7 +2989,7 @@ GL_COMPUTE_SHADER
|
|||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
## Defines - RLGL GlVersion
|
## Defines - RLGL GL blending factors
|
||||||
> RL_ZERO = 0
|
> RL_ZERO = 0
|
||||||
|
|
||||||
GL_ZERO
|
GL_ZERO
|
||||||
@@ -6585,9 +6597,24 @@ Compute model bounding box limits (considers all meshes)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.SetModelTransform( Model model, Matrix transform )
|
||||||
|
|
||||||
|
Set model transform matrix
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> success = RL.SetModelMesh( Model model, int meshId, Mesh mesh )
|
||||||
|
|
||||||
|
Get model mesh. Return as lightuserdata
|
||||||
|
|
||||||
|
- Failure return false
|
||||||
|
- Success return true
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> success = RL.SetModelMaterial( Model model, int modelMaterialId, Material material )
|
> success = RL.SetModelMaterial( Model model, int modelMaterialId, Material material )
|
||||||
|
|
||||||
Copies material to model material. (Model material is the material id in models.)
|
Copies material to model material
|
||||||
|
|
||||||
- Failure return false
|
- Failure return false
|
||||||
- Success return true
|
- Success return true
|
||||||
@@ -6600,9 +6627,21 @@ Set material for a mesh (Mesh and material on this model)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> RL.SetModelTransform( Model model, Matrix transform )
|
> success = RL.SetModelBone( Model model, int boneId, BoneInfo bone )
|
||||||
|
|
||||||
Set model transform matrix
|
Set model bone information (skeleton)
|
||||||
|
|
||||||
|
- Failure return false
|
||||||
|
- Success return true
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> success = RL.SetModelBindPose( Model model, int boneId, Transform pose )
|
||||||
|
|
||||||
|
Set model bones base transformation (pose)
|
||||||
|
|
||||||
|
- Failure return false
|
||||||
|
- Success return true
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -6614,6 +6653,66 @@ Get model transform matrix
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> meshCount = RL.GetModelMeshCount( Model model )
|
||||||
|
|
||||||
|
Get model number of meshes
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> meshCount = RL.GetModelMaterialCount( Model model )
|
||||||
|
|
||||||
|
Get model number of materials
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> mesh = RL.GetModelMesh( Model model, int meshId )
|
||||||
|
|
||||||
|
Get model mesh. Return as lightuserdata
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return Mesh
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> material = RL.GetModelMaterial( Model model, int materialId )
|
||||||
|
|
||||||
|
Get model material. Return as lightuserdata
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return Material
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> boneCount = RL.GetModelBoneCount( Model model )
|
||||||
|
|
||||||
|
Get model number of bones
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> bone = RL.GetModelBone( Model model, int boneId )
|
||||||
|
|
||||||
|
Get model bones information (skeleton)
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return BoneInfo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> pose = RL.GetModelBindPose( Model model, int boneId )
|
||||||
|
|
||||||
|
Get models bones base transformation (pose)
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return Transform
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Models - Model drawing functions
|
## Models - Model drawing functions
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1034,7 +1034,7 @@ RL.RL_VERTEX_SHADER=35633
|
|||||||
---GL_COMPUTE_SHADER
|
---GL_COMPUTE_SHADER
|
||||||
RL.RL_COMPUTE_SHADER=37305
|
RL.RL_COMPUTE_SHADER=37305
|
||||||
|
|
||||||
-- Defines - RLGL GlVersion
|
-- Defines - RLGL GL blending factors
|
||||||
|
|
||||||
---GL_ZERO
|
---GL_ZERO
|
||||||
RL.RL_ZERO=0
|
RL.RL_ZERO=0
|
||||||
@@ -3995,7 +3995,22 @@ function RL.UnloadModel( model ) end
|
|||||||
---@return any boundingBox
|
---@return any boundingBox
|
||||||
function RL.GetModelBoundingBox( model ) end
|
function RL.GetModelBoundingBox( model ) end
|
||||||
|
|
||||||
---Copies material to model material. (Model material is the material id in models.)
|
---Set model transform matrix
|
||||||
|
---@param model any
|
||||||
|
---@param transform table
|
||||||
|
---@return any RL.SetModelTransform
|
||||||
|
function RL.SetModelTransform( model, transform ) end
|
||||||
|
|
||||||
|
---Get model mesh. Return as lightuserdata
|
||||||
|
---- Failure return false
|
||||||
|
---- Success return true
|
||||||
|
---@param model any
|
||||||
|
---@param meshId integer
|
||||||
|
---@param mesh any
|
||||||
|
---@return any success
|
||||||
|
function RL.SetModelMesh( model, meshId, mesh ) end
|
||||||
|
|
||||||
|
---Copies material to model material
|
||||||
---- Failure return false
|
---- Failure return false
|
||||||
---- Success return true
|
---- Success return true
|
||||||
---@param model any
|
---@param model any
|
||||||
@@ -4011,11 +4026,23 @@ function RL.SetModelMaterial( model, modelMaterialId, material ) end
|
|||||||
---@return any RL.SetModelMeshMaterial
|
---@return any RL.SetModelMeshMaterial
|
||||||
function RL.SetModelMeshMaterial( model, meshId, materialId ) end
|
function RL.SetModelMeshMaterial( model, meshId, materialId ) end
|
||||||
|
|
||||||
---Set model transform matrix
|
---Set model bone information (skeleton)
|
||||||
|
---- Failure return false
|
||||||
|
---- Success return true
|
||||||
---@param model any
|
---@param model any
|
||||||
---@param transform table
|
---@param boneId integer
|
||||||
---@return any RL.SetModelTransform
|
---@param bone any
|
||||||
function RL.SetModelTransform( model, transform ) end
|
---@return any success
|
||||||
|
function RL.SetModelBone( model, boneId, bone ) end
|
||||||
|
|
||||||
|
---Set model bones base transformation (pose)
|
||||||
|
---- Failure return false
|
||||||
|
---- Success return true
|
||||||
|
---@param model any
|
||||||
|
---@param boneId integer
|
||||||
|
---@param pose any
|
||||||
|
---@return any success
|
||||||
|
function RL.SetModelBindPose( model, boneId, pose ) end
|
||||||
|
|
||||||
---Get model transform matrix
|
---Get model transform matrix
|
||||||
---- Success return Matrix
|
---- Success return Matrix
|
||||||
@@ -4023,6 +4050,56 @@ function RL.SetModelTransform( model, transform ) end
|
|||||||
---@return any transform
|
---@return any transform
|
||||||
function RL.GetModelTransform( model ) end
|
function RL.GetModelTransform( model ) end
|
||||||
|
|
||||||
|
---Get model number of meshes
|
||||||
|
---- Success return int
|
||||||
|
---@param model any
|
||||||
|
---@return any meshCount
|
||||||
|
function RL.GetModelMeshCount( model ) end
|
||||||
|
|
||||||
|
---Get model number of materials
|
||||||
|
---- Success return int
|
||||||
|
---@param model any
|
||||||
|
---@return any meshCount
|
||||||
|
function RL.GetModelMaterialCount( model ) end
|
||||||
|
|
||||||
|
---Get model mesh. Return as lightuserdata
|
||||||
|
---- Failure return nil
|
||||||
|
---- Success return Mesh
|
||||||
|
---@param model any
|
||||||
|
---@param meshId integer
|
||||||
|
---@return any mesh
|
||||||
|
function RL.GetModelMesh( model, meshId ) end
|
||||||
|
|
||||||
|
---Get model material. Return as lightuserdata
|
||||||
|
---- Failure return nil
|
||||||
|
---- Success return Material
|
||||||
|
---@param model any
|
||||||
|
---@param materialId integer
|
||||||
|
---@return any material
|
||||||
|
function RL.GetModelMaterial( model, materialId ) end
|
||||||
|
|
||||||
|
---Get model number of bones
|
||||||
|
---- Success return int
|
||||||
|
---@param model any
|
||||||
|
---@return any boneCount
|
||||||
|
function RL.GetModelBoneCount( model ) end
|
||||||
|
|
||||||
|
---Get model bones information (skeleton)
|
||||||
|
---- Failure return nil
|
||||||
|
---- Success return BoneInfo
|
||||||
|
---@param model any
|
||||||
|
---@param boneId integer
|
||||||
|
---@return any bone
|
||||||
|
function RL.GetModelBone( model, boneId ) end
|
||||||
|
|
||||||
|
---Get models bones base transformation (pose)
|
||||||
|
---- Failure return nil
|
||||||
|
---- Success return Transform
|
||||||
|
---@param model any
|
||||||
|
---@param boneId integer
|
||||||
|
---@return any pose
|
||||||
|
function RL.GetModelBindPose( model, boneId ) end
|
||||||
|
|
||||||
-- Models - Model drawing functions
|
-- Models - Model drawing functions
|
||||||
|
|
||||||
---Draw a model (With texture if set)
|
---Draw a model (With texture if set)
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ KEY CHANGES:
|
|||||||
- CHANGE: Raygui wrapper library is now object based. Possible to have multiple separated gui systems.
|
- CHANGE: Raygui wrapper library is now object based. Possible to have multiple separated gui systems.
|
||||||
- ADDED: Raygui wrapper library disabled and styles for each element.
|
- ADDED: Raygui wrapper library disabled and styles for each element.
|
||||||
- ADDED: Files management functions.
|
- ADDED: Files management functions.
|
||||||
|
- ADDED: More Model management functions.
|
||||||
|
|
||||||
DETAILED CHANGES:
|
DETAILED CHANGES:
|
||||||
- REMOVED: DrawLineBezierQuad, DrawLineBezierCubic.
|
- REMOVED: DrawLineBezierQuad, DrawLineBezierCubic.
|
||||||
@@ -39,6 +40,8 @@ DETAILED CHANGES:
|
|||||||
- ADDED: GetTextureDefault.
|
- ADDED: GetTextureDefault.
|
||||||
- CHANGE: Renamed Files management functions to Files system functions as in raylib.
|
- CHANGE: Renamed Files management functions to Files system functions as in raylib.
|
||||||
- CHANGE: Renamed ExportBufferAsCode to ExportDataAsCode.
|
- CHANGE: Renamed ExportBufferAsCode to ExportDataAsCode.
|
||||||
|
- ADDED: BoneInfo.
|
||||||
|
- ADDED: Transform.
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
Release: ReiLua version 0.6.0 Using Raylib 4.5
|
Release: ReiLua version 0.6.0 Using Raylib 4.5
|
||||||
|
|||||||
9
devnotes
9
devnotes
@@ -5,7 +5,7 @@ Backlog {
|
|||||||
* Raygui lib
|
* Raygui lib
|
||||||
* Check if could remove flickering from changing draw order by making queue for order changing and only
|
* Check if could remove flickering from changing draw order by making queue for order changing and only
|
||||||
change them after everything is drawn.
|
change them after everything is drawn.
|
||||||
* Platform desktop SDL.
|
* Platform desktop SDL
|
||||||
* Text input not working on gui. Could this be Raylib issue?
|
* Text input not working on gui. Could this be Raylib issue?
|
||||||
* Haptic functions.
|
* Haptic functions.
|
||||||
* Text
|
* Text
|
||||||
@@ -16,12 +16,10 @@ Backlog {
|
|||||||
* GenImageFontAtlas.
|
* GenImageFontAtlas.
|
||||||
* Audio
|
* Audio
|
||||||
* AudioStream.
|
* AudioStream.
|
||||||
* Models
|
|
||||||
* More Model management functions. Get mesh and material etc.
|
|
||||||
* BoneInfo.
|
|
||||||
* LoadMaterialsFromModel (Could then for example edit and set back to model).
|
|
||||||
* Core
|
* Core
|
||||||
* Automation events functionality.
|
* Automation events functionality.
|
||||||
|
* Models
|
||||||
|
* More Animation management functions.
|
||||||
|
|
||||||
* Examples
|
* Examples
|
||||||
* Improve Dungeon crawler example by generating custom mesh instead of drawing 3D quads.
|
* Improve Dungeon crawler example by generating custom mesh instead of drawing 3D quads.
|
||||||
@@ -40,4 +38,5 @@ Needs Testing {
|
|||||||
* rlUpdateTexture
|
* rlUpdateTexture
|
||||||
* rlReadTexturePixels
|
* rlReadTexturePixels
|
||||||
* rlReadScreenPixels
|
* rlReadScreenPixels
|
||||||
|
* SetModelMesh Test unloading for double free or other errors.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -223,6 +223,10 @@ apiFile:write( "\n> BoundingBox = { { 0.0, 0.0, 0.0 }, { 1.0, 1.0, 1.0 } } or {
|
|||||||
BoundingBox\n\n---\n" )
|
BoundingBox\n\n---\n" )
|
||||||
apiFile:write( "\n> GlyphInfo = { value = int, offsetX = int, offsetY = int, advanceX = int, image = Image }\n\
|
apiFile:write( "\n> GlyphInfo = { value = int, offsetX = int, offsetY = int, advanceX = int, image = Image }\n\
|
||||||
GlyphInfo, font characters glyphs info\n\n---\n" )
|
GlyphInfo, font characters glyphs info\n\n---\n" )
|
||||||
|
apiFile:write( "\n> BoneInfo = { name = string[32], parent = int }\n\
|
||||||
|
Bone, skeletal animation bone\n\n---\n" )
|
||||||
|
apiFile:write( "\n> Transform = { translation = Vector3, rotation = Quaternion, scale = Vector3 }\n\
|
||||||
|
Transform, vertex transformation data\n\n---\n" )
|
||||||
apiFile:write( "\n> Wave = Userdata\n\
|
apiFile:write( "\n> Wave = Userdata\n\
|
||||||
Wave, audio wave data\n\n---\n" )
|
Wave, audio wave data\n\n---\n" )
|
||||||
apiFile:write( "\n> Sound = Userdata\n\
|
apiFile:write( "\n> Sound = Userdata\n\
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ Matrix uluaGetMatrix( lua_State *L, int index );
|
|||||||
BoundingBox uluaGetBoundingBox( lua_State *L, int index );
|
BoundingBox uluaGetBoundingBox( lua_State *L, int index );
|
||||||
Ray uluaGetRay( lua_State *L, int index );
|
Ray uluaGetRay( lua_State *L, int index );
|
||||||
NPatchInfo uluaGetNPatchInfo( lua_State *L, int index );
|
NPatchInfo uluaGetNPatchInfo( lua_State *L, int index );
|
||||||
|
GlyphInfo uluaGetGlyphInfo( lua_State *L, int index );
|
||||||
|
BoneInfo uluaGetBoneInfo( lua_State *L, int index );
|
||||||
|
Transform uluaGetTransform( lua_State *L, int index );
|
||||||
Buffer* uluaGetBuffer( lua_State *L, int index );
|
Buffer* uluaGetBuffer( lua_State *L, int index );
|
||||||
Image* uluaGetImage( lua_State *L, int index );
|
Image* uluaGetImage( lua_State *L, int index );
|
||||||
Texture* uluaGetTexture( lua_State *L, int index );
|
Texture* uluaGetTexture( lua_State *L, int index );
|
||||||
@@ -73,6 +76,8 @@ void uluaPushRay( lua_State *L, Ray ray );
|
|||||||
void uluaPushRayCollision( lua_State *L, RayCollision rayCol );
|
void uluaPushRayCollision( lua_State *L, RayCollision rayCol );
|
||||||
void uluaPushBoundingBox( lua_State *L, BoundingBox box );
|
void uluaPushBoundingBox( lua_State *L, BoundingBox box );
|
||||||
void uluaPushGlyphInfo( lua_State *L, GlyphInfo glyphInfo, Image *image );
|
void uluaPushGlyphInfo( lua_State *L, GlyphInfo glyphInfo, Image *image );
|
||||||
|
void uluaPushBoneInfo( lua_State *L, BoneInfo boneInfo );
|
||||||
|
void uluaPushTransform( lua_State *L, Transform transform );
|
||||||
void uluaPushBuffer( lua_State *L, Buffer buffer );
|
void uluaPushBuffer( lua_State *L, Buffer buffer );
|
||||||
void uluaPushImage( lua_State *L, Image image );
|
void uluaPushImage( lua_State *L, Image image );
|
||||||
void uluaPushTexture( lua_State *L, Texture texture );
|
void uluaPushTexture( lua_State *L, Texture texture );
|
||||||
|
|||||||
@@ -33,10 +33,20 @@ int lmodelsLoadModelFromMesh( lua_State *L );
|
|||||||
int lmodelsIsModelReady( lua_State *L );
|
int lmodelsIsModelReady( lua_State *L );
|
||||||
int lmodelsUnloadModel( lua_State *L );
|
int lmodelsUnloadModel( lua_State *L );
|
||||||
int lmodelsGetModelBoundingBox( lua_State *L );
|
int lmodelsGetModelBoundingBox( lua_State *L );
|
||||||
|
int lmodelsSetModelTransform( lua_State *L );
|
||||||
|
int lmodelsSetModelMesh( lua_State *L );
|
||||||
int lmodelsSetModelMaterial( lua_State *L );
|
int lmodelsSetModelMaterial( lua_State *L );
|
||||||
int lmodelsSetModelMeshMaterial( lua_State *L );
|
int lmodelsSetModelMeshMaterial( lua_State *L );
|
||||||
int lmodelsSetModelTransform( lua_State *L );
|
int lmodelsSetModelBone( lua_State *L );
|
||||||
|
int lmodelsSetModelBindPose( lua_State *L );
|
||||||
int lmodelsGetModelTransform( lua_State *L );
|
int lmodelsGetModelTransform( lua_State *L );
|
||||||
|
int lmodelsGetModelMeshCount( lua_State *L );
|
||||||
|
int lmodelsGetModelMaterialCount( lua_State *L );
|
||||||
|
int lmodelsGetModelMesh( lua_State *L );
|
||||||
|
int lmodelsGetModelMaterial( lua_State *L );
|
||||||
|
int lmodelsGetModelBoneCount( lua_State *L );
|
||||||
|
int lmodelsGetModelBone( lua_State *L );
|
||||||
|
int lmodelsGetModelBindPose( lua_State *L );
|
||||||
/* Model drawing functions. */
|
/* Model drawing functions. */
|
||||||
int lmodelsDrawModel( lua_State *L );
|
int lmodelsDrawModel( lua_State *L );
|
||||||
int lmodelsDrawModelEx( lua_State *L );
|
int lmodelsDrawModelEx( lua_State *L );
|
||||||
|
|||||||
169
src/lua_core.c
169
src/lua_core.c
@@ -845,7 +845,7 @@ static void defineGlobals() {
|
|||||||
assignGlobalInt( RL_FRAGMENT_SHADER, "RL_FRAGMENT_SHADER" ); // GL_FRAGMENT_SHADER
|
assignGlobalInt( RL_FRAGMENT_SHADER, "RL_FRAGMENT_SHADER" ); // GL_FRAGMENT_SHADER
|
||||||
assignGlobalInt( RL_VERTEX_SHADER, "RL_VERTEX_SHADER" ); // GL_VERTEX_SHADER
|
assignGlobalInt( RL_VERTEX_SHADER, "RL_VERTEX_SHADER" ); // GL_VERTEX_SHADER
|
||||||
assignGlobalInt( RL_COMPUTE_SHADER, "RL_COMPUTE_SHADER" ); // GL_COMPUTE_SHADER
|
assignGlobalInt( RL_COMPUTE_SHADER, "RL_COMPUTE_SHADER" ); // GL_COMPUTE_SHADER
|
||||||
/* RLGL GlVersion */
|
/* RLGL GL blending factors */
|
||||||
assignGlobalInt( RL_ZERO, "RL_ZERO" ); // GL_ZERO
|
assignGlobalInt( RL_ZERO, "RL_ZERO" ); // GL_ZERO
|
||||||
assignGlobalInt( RL_ONE, "RL_ONE" ); // GL_ONE
|
assignGlobalInt( RL_ONE, "RL_ONE" ); // GL_ONE
|
||||||
assignGlobalInt( RL_SRC_COLOR, "RL_SRC_COLOR" ); // GL_SRC_COLOR
|
assignGlobalInt( RL_SRC_COLOR, "RL_SRC_COLOR" ); // GL_SRC_COLOR
|
||||||
@@ -1586,10 +1586,20 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "IsModelReady", lmodelsIsModelReady );
|
assingGlobalFunction( "IsModelReady", lmodelsIsModelReady );
|
||||||
assingGlobalFunction( "UnloadModel", lmodelsUnloadModel );
|
assingGlobalFunction( "UnloadModel", lmodelsUnloadModel );
|
||||||
assingGlobalFunction( "GetModelBoundingBox", lmodelsGetModelBoundingBox );
|
assingGlobalFunction( "GetModelBoundingBox", lmodelsGetModelBoundingBox );
|
||||||
|
assingGlobalFunction( "SetModelTransform", lmodelsSetModelTransform );
|
||||||
|
assingGlobalFunction( "SetModelMesh", lmodelsSetModelMesh );
|
||||||
assingGlobalFunction( "SetModelMaterial", lmodelsSetModelMaterial );
|
assingGlobalFunction( "SetModelMaterial", lmodelsSetModelMaterial );
|
||||||
assingGlobalFunction( "SetModelMeshMaterial", lmodelsSetModelMeshMaterial );
|
assingGlobalFunction( "SetModelMeshMaterial", lmodelsSetModelMeshMaterial );
|
||||||
assingGlobalFunction( "SetModelTransform", lmodelsSetModelTransform );
|
assingGlobalFunction( "SetModelBone", lmodelsSetModelBone );
|
||||||
|
assingGlobalFunction( "SetModelBindPose", lmodelsSetModelBindPose );
|
||||||
assingGlobalFunction( "GetModelTransform", lmodelsGetModelTransform );
|
assingGlobalFunction( "GetModelTransform", lmodelsGetModelTransform );
|
||||||
|
assingGlobalFunction( "GetModelMeshCount", lmodelsGetModelMeshCount );
|
||||||
|
assingGlobalFunction( "GetModelMaterialCount", lmodelsGetModelMaterialCount );
|
||||||
|
assingGlobalFunction( "GetModelMesh", lmodelsGetModelMesh );
|
||||||
|
assingGlobalFunction( "GetModelMaterial", lmodelsGetModelMaterial );
|
||||||
|
assingGlobalFunction( "GetModelBoneCount", lmodelsGetModelBoneCount );
|
||||||
|
assingGlobalFunction( "GetModelBone", lmodelsGetModelBone );
|
||||||
|
assingGlobalFunction( "GetModelBindPose", lmodelsGetModelBindPose );
|
||||||
/* Model drawing functions. */
|
/* Model drawing functions. */
|
||||||
assingGlobalFunction( "DrawModel", lmodelsDrawModel );
|
assingGlobalFunction( "DrawModel", lmodelsDrawModel );
|
||||||
assingGlobalFunction( "DrawModelEx", lmodelsDrawModelEx );
|
assingGlobalFunction( "DrawModelEx", lmodelsDrawModelEx );
|
||||||
@@ -2481,7 +2491,6 @@ BoundingBox uluaGetBoundingBox( lua_State *L, int index ) {
|
|||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return box;
|
return box;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2518,7 +2527,6 @@ Ray uluaGetRay( lua_State *L, int index ) {
|
|||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ray;
|
return ray;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2581,6 +2589,139 @@ NPatchInfo uluaGetNPatchInfo( lua_State *L, int index ) {
|
|||||||
return npatch;
|
return npatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GlyphInfo uluaGetGlyphInfo( lua_State *L, int index ) {
|
||||||
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
|
GlyphInfo glyph = { 0 };
|
||||||
|
|
||||||
|
int t = index, i = 0;
|
||||||
|
lua_pushnil( L );
|
||||||
|
|
||||||
|
while ( lua_next( L, t ) != 0 ) {
|
||||||
|
/* Do not check type since there should be table and ints. */
|
||||||
|
if ( lua_isnumber( L, -2 ) ) {
|
||||||
|
switch ( i ) {
|
||||||
|
case 0:
|
||||||
|
glyph.value = lua_tointeger( L, -1 );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
glyph.offsetX = lua_tointeger( L, -1 );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
glyph.offsetY = lua_tointeger( L, -1 );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
glyph.advanceX = lua_tointeger( L, -1 );
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
glyph.image = *uluaGetImage( L, lua_gettop( L ) );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( lua_isstring( L, -2 ) ) {
|
||||||
|
if ( strcmp( "value", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
glyph.value = lua_tointeger( L, -1 );
|
||||||
|
}
|
||||||
|
else if ( strcmp( "offsetX", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
glyph.offsetX = lua_tointeger( L, -1 );
|
||||||
|
}
|
||||||
|
else if ( strcmp( "offsetY", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
glyph.offsetY = lua_tointeger( L, -1 );
|
||||||
|
}
|
||||||
|
else if ( strcmp( "advanceX", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
glyph.advanceX = lua_tointeger( L, -1 );
|
||||||
|
}
|
||||||
|
else if ( strcmp( "image", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
glyph.image = *uluaGetImage( L, lua_gettop( L ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
return glyph;
|
||||||
|
}
|
||||||
|
|
||||||
|
BoneInfo uluaGetBoneInfo( lua_State *L, int index ) {
|
||||||
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
|
BoneInfo bone = { 0 };
|
||||||
|
|
||||||
|
int t = index, i = 0;
|
||||||
|
lua_pushnil( L );
|
||||||
|
|
||||||
|
while ( lua_next( L, t ) != 0 ) {
|
||||||
|
/* Do not check type since there should be table and ints. */
|
||||||
|
if ( lua_isnumber( L, -2 ) ) {
|
||||||
|
switch ( i ) {
|
||||||
|
case 0:
|
||||||
|
strncpy( bone.name, lua_tostring( L, lua_gettop( L ) ), 32 );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
bone.parent = lua_tointeger( L, -1 );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( lua_istable( L, -1 ) ) {
|
||||||
|
if ( lua_isstring( L, -2 ) ) {
|
||||||
|
if ( strcmp( "name", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
strncpy( bone.name, lua_tostring( L, lua_gettop( L ) ), 32 );
|
||||||
|
}
|
||||||
|
else if ( strcmp( "parent", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
bone.parent = lua_tointeger( L, -1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bone;
|
||||||
|
}
|
||||||
|
|
||||||
|
Transform uluaGetTransform( lua_State *L, int index ) {
|
||||||
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
|
Transform transform = { 0 };
|
||||||
|
|
||||||
|
int t = index, i = 0;
|
||||||
|
lua_pushnil( L );
|
||||||
|
|
||||||
|
while ( lua_next( L, t ) != 0 ) {
|
||||||
|
/* Do not check type since there should be table and ints. */
|
||||||
|
if ( lua_isnumber( L, -2 ) ) {
|
||||||
|
switch ( i ) {
|
||||||
|
case 0:
|
||||||
|
transform.translation = uluaGetVector3( L, lua_gettop( L ) );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
transform.rotation = uluaGetQuaternion( L, lua_gettop( L ) );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
transform.scale = uluaGetVector3( L, lua_gettop( L ) );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( lua_istable( L, -1 ) ) {
|
||||||
|
if ( lua_isstring( L, -2 ) ) {
|
||||||
|
if ( strcmp( "translation", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
transform.translation = uluaGetVector3( L, lua_gettop( L ) );
|
||||||
|
}
|
||||||
|
else if ( strcmp( "rotation", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
transform.rotation = uluaGetQuaternion( L, lua_gettop( L ) );
|
||||||
|
}
|
||||||
|
else if ( strcmp( "scale", (char*)lua_tostring( L, -2 ) ) == 0 ) {
|
||||||
|
transform.scale = uluaGetVector3( L, lua_gettop( L ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return transform;
|
||||||
|
}
|
||||||
|
|
||||||
Buffer* uluaGetBuffer( lua_State *L, int index ) {
|
Buffer* uluaGetBuffer( lua_State *L, int index ) {
|
||||||
if ( lua_islightuserdata( L, index ) ) {
|
if ( lua_islightuserdata( L, index ) ) {
|
||||||
return (Buffer*)lua_touserdata( L, index );
|
return (Buffer*)lua_touserdata( L, index );
|
||||||
@@ -2866,7 +3007,7 @@ void uluaPushBoundingBox( lua_State *L, BoundingBox box ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void uluaPushGlyphInfo( lua_State *L, GlyphInfo glyphInfo, Image *image ) {
|
void uluaPushGlyphInfo( lua_State *L, GlyphInfo glyphInfo, Image *image ) {
|
||||||
lua_createtable( L, 4, 0 );
|
lua_createtable( L, 5, 0 );
|
||||||
lua_pushinteger( L, glyphInfo.value );
|
lua_pushinteger( L, glyphInfo.value );
|
||||||
lua_setfield( L, -2, "value" );
|
lua_setfield( L, -2, "value" );
|
||||||
lua_pushinteger( L, glyphInfo.offsetX );
|
lua_pushinteger( L, glyphInfo.offsetX );
|
||||||
@@ -2879,6 +3020,24 @@ void uluaPushGlyphInfo( lua_State *L, GlyphInfo glyphInfo, Image *image ) {
|
|||||||
lua_setfield( L, -2, "image" );
|
lua_setfield( L, -2, "image" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uluaPushBoneInfo( lua_State *L, BoneInfo boneInfo ) {
|
||||||
|
lua_createtable( L, 2, 0 );
|
||||||
|
lua_pushstring( L, boneInfo.name );
|
||||||
|
lua_setfield( L, -2, "name" );
|
||||||
|
lua_pushinteger( L, boneInfo.parent );
|
||||||
|
lua_setfield( L, -2, "parent" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void uluaPushTransform( lua_State *L, Transform transform ) {
|
||||||
|
lua_createtable( L, 3, 0 );
|
||||||
|
uluaPushVector3( L, transform.translation );
|
||||||
|
lua_setfield( L, -2, "name" );
|
||||||
|
uluaPushQuaternion( L, transform.rotation );
|
||||||
|
lua_setfield( L, -2, "rotation" );
|
||||||
|
uluaPushVector3( L, transform.scale );
|
||||||
|
lua_setfield( L, -2, "scale" );
|
||||||
|
}
|
||||||
|
|
||||||
void uluaPushBuffer( lua_State *L, Buffer buffer ) {
|
void uluaPushBuffer( lua_State *L, Buffer buffer ) {
|
||||||
if ( buffer.size == 0 ) {
|
if ( buffer.size == 0 ) {
|
||||||
buffer.data = NULL;
|
buffer.data = NULL;
|
||||||
|
|||||||
222
src/models.c
222
src/models.c
@@ -572,10 +572,49 @@ int lmodelsGetModelBoundingBox( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetModelTransform( Model model, Matrix transform )
|
||||||
|
|
||||||
|
Set model transform matrix
|
||||||
|
*/
|
||||||
|
int lmodelsSetModelTransform( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
Matrix transform = uluaGetMatrix( L, 2 );
|
||||||
|
|
||||||
|
model->transform = transform;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> success = RL.SetModelMesh( Model model, int meshId, Mesh mesh )
|
||||||
|
|
||||||
|
Get model mesh. Return as lightuserdata
|
||||||
|
|
||||||
|
- Failure return false
|
||||||
|
- Success return true
|
||||||
|
*/
|
||||||
|
int lmodelsSetModelMesh( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
int meshId = luaL_checkinteger( L, 2 );
|
||||||
|
Mesh *mesh = uluaGetMesh( L, 3 );
|
||||||
|
|
||||||
|
if ( 0 <= meshId && meshId < model->meshCount ) {
|
||||||
|
// TODO Test if mesh should be copied instead. Is there issues with unloading.
|
||||||
|
model->meshes[ meshId ] = *mesh;
|
||||||
|
lua_pushboolean( L, true );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TraceLog( LOG_WARNING, "MeshId %d out of bounds", meshId );
|
||||||
|
lua_pushboolean( L, false );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> success = RL.SetModelMaterial( Model model, int modelMaterialId, Material material )
|
> success = RL.SetModelMaterial( Model model, int modelMaterialId, Material material )
|
||||||
|
|
||||||
Copies material to model material. (Model material is the material id in models.)
|
Copies material to model material
|
||||||
|
|
||||||
- Failure return false
|
- Failure return false
|
||||||
- Success return true
|
- Success return true
|
||||||
@@ -585,8 +624,6 @@ int lmodelsSetModelMaterial( lua_State *L ) {
|
|||||||
int modelMaterialId = luaL_checkinteger( L, 2 );
|
int modelMaterialId = luaL_checkinteger( L, 2 );
|
||||||
Material *material = uluaGetMaterial( L, 3 );
|
Material *material = uluaGetMaterial( L, 3 );
|
||||||
|
|
||||||
//TODO Could maybe return old shader and textures for storage or get garbage collected?
|
|
||||||
|
|
||||||
if ( 0 <= modelMaterialId && modelMaterialId < model->materialCount ) {
|
if ( 0 <= modelMaterialId && modelMaterialId < model->materialCount ) {
|
||||||
/* Copy material data instead of using pointer. Pointer would result in double free error. */
|
/* Copy material data instead of using pointer. Pointer would result in double free error. */
|
||||||
model->materials[ modelMaterialId ].shader = material->shader;
|
model->materials[ modelMaterialId ].shader = material->shader;
|
||||||
@@ -630,17 +667,51 @@ int lmodelsSetModelMeshMaterial( lua_State *L ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> RL.SetModelTransform( Model model, Matrix transform )
|
> success = RL.SetModelBone( Model model, int boneId, BoneInfo bone )
|
||||||
|
|
||||||
Set model transform matrix
|
Set model bone information (skeleton)
|
||||||
|
|
||||||
|
- Failure return false
|
||||||
|
- Success return true
|
||||||
*/
|
*/
|
||||||
int lmodelsSetModelTransform( lua_State *L ) {
|
int lmodelsSetModelBone( lua_State *L ) {
|
||||||
Model *model = uluaGetModel( L, 1 );
|
Model *model = uluaGetModel( L, 1 );
|
||||||
Matrix transform = uluaGetMatrix( L, 2 );
|
int boneId = luaL_checkinteger( L, 2 );
|
||||||
|
BoneInfo bone = uluaGetBoneInfo( L, 3 );
|
||||||
|
|
||||||
model->transform = transform;
|
if ( 0 <= boneId && boneId < model->boneCount ) {
|
||||||
|
model->bones[ boneId ] = bone;
|
||||||
|
lua_pushboolean( L, true );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TraceLog( LOG_WARNING, "boneId %d out of bounds", boneId );
|
||||||
|
lua_pushboolean( L, false );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
/*
|
||||||
|
> success = RL.SetModelBindPose( Model model, int boneId, Transform pose )
|
||||||
|
|
||||||
|
Set model bones base transformation (pose)
|
||||||
|
|
||||||
|
- Failure return false
|
||||||
|
- Success return true
|
||||||
|
*/
|
||||||
|
int lmodelsSetModelBindPose( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
int boneId = luaL_checkinteger( L, 2 );
|
||||||
|
Transform pose = uluaGetTransform( L, 3 );
|
||||||
|
|
||||||
|
if ( 0 <= boneId && boneId < model->boneCount ) {
|
||||||
|
model->bindPose[ boneId ] = pose;
|
||||||
|
lua_pushboolean( L, true );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TraceLog( LOG_WARNING, "boneId %d out of bounds", boneId );
|
||||||
|
lua_pushboolean( L, false );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -658,6 +729,139 @@ int lmodelsGetModelTransform( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> meshCount = RL.GetModelMeshCount( Model model )
|
||||||
|
|
||||||
|
Get model number of meshes
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
*/
|
||||||
|
int lmodelsGetModelMeshCount( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
|
||||||
|
lua_pushinteger( L, model->meshCount );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> meshCount = RL.GetModelMaterialCount( Model model )
|
||||||
|
|
||||||
|
Get model number of materials
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
*/
|
||||||
|
int lmodelsGetModelMaterialCount( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
|
||||||
|
lua_pushinteger( L, model->materialCount );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> mesh = RL.GetModelMesh( Model model, int meshId )
|
||||||
|
|
||||||
|
Get model mesh. Return as lightuserdata
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return Mesh
|
||||||
|
*/
|
||||||
|
int lmodelsGetModelMesh( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
int meshId = luaL_checkinteger( L, 2 );
|
||||||
|
|
||||||
|
if ( 0 <= meshId && meshId < model->meshCount ) {
|
||||||
|
lua_pushlightuserdata( L, &model->meshes[ meshId ] );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TraceLog( LOG_WARNING, "MeshId %d out of bounds", meshId );
|
||||||
|
lua_pushnil( L );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> material = RL.GetModelMaterial( Model model, int materialId )
|
||||||
|
|
||||||
|
Get model material. Return as lightuserdata
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return Material
|
||||||
|
*/
|
||||||
|
int lmodelsGetModelMaterial( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
int materialId = luaL_checkinteger( L, 2 );
|
||||||
|
|
||||||
|
if ( 0 <= materialId && materialId < model->materialCount ) {
|
||||||
|
lua_pushlightuserdata( L, &model->materials[ materialId ] );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TraceLog( LOG_WARNING, "MaterialId %d out of bounds", materialId );
|
||||||
|
lua_pushnil( L );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> boneCount = RL.GetModelBoneCount( Model model )
|
||||||
|
|
||||||
|
Get model number of bones
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
*/
|
||||||
|
int lmodelsGetModelBoneCount( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
|
||||||
|
lua_pushinteger( L, model->boneCount );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> bone = RL.GetModelBone( Model model, int boneId )
|
||||||
|
|
||||||
|
Get model bones information (skeleton)
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return BoneInfo
|
||||||
|
*/
|
||||||
|
int lmodelsGetModelBone( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
int boneId = luaL_checkinteger( L, 2 );
|
||||||
|
|
||||||
|
if ( 0 <= boneId && boneId < model->boneCount ) {
|
||||||
|
uluaPushBoneInfo( L, model->bones[ boneId ] );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TraceLog( LOG_WARNING, "BoneId %d out of bounds", boneId );
|
||||||
|
lua_pushnil( L );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> pose = RL.GetModelBindPose( Model model, int boneId )
|
||||||
|
|
||||||
|
Get models bones base transformation (pose)
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return Transform
|
||||||
|
*/
|
||||||
|
int lmodelsGetModelBindPose( lua_State *L ) {
|
||||||
|
Model *model = uluaGetModel( L, 1 );
|
||||||
|
int boneId = luaL_checkinteger( L, 2 );
|
||||||
|
|
||||||
|
if ( 0 <= boneId && boneId < model->boneCount ) {
|
||||||
|
uluaPushTransform( L, model->bindPose[ boneId ] );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TraceLog( LOG_WARNING, "BoneId %d out of bounds", boneId );
|
||||||
|
lua_pushnil( L );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
## Models - Model drawing functions
|
## Models - Model drawing functions
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user