![]() |
LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2025 ETMSoftware
|
Functions | |
| LG_Mesh * | lg_mesh_load (const char *relative_path, LG_LoadMesh_Flags flags) |
| LG_Mesh * | lg_mesh_load_easy (const char *relative_path, zboolean force_reload_objs, LG_LoadMesh_Flags flags1) |
| LG_Mesh * | lg_mesh_new_from_objfile (const char *relative_path, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| LG_Mesh * | lg_mesh_new_from_fbxfile (const char *relative_path, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| void | lg_mesh_free (LG_Mesh *mesh) |
| int | lg_bmesh_save_to_file (const char *full_path, LG_Mesh *mesh) |
| int | lg_bmesh_load_from_file (const char *full_path, LG_Mesh **mesh) |
| int | lg_mesh_reload_mats (LG_Mesh *mesh) |
| void | lg_serialize_LG_Material_64_to_32 (Serializable_LG_Material *s_mat, LG_Material *mat) |
| void | lg_unserialize_LG_Material_32_to_64 (LG_Material *mat, Serializable_LG_Material *s_mat) |
| void | lg_serialize_LG_Mesh_64_to_32 (Serializable_LG_Mesh *s_mesh, LG_Mesh *mesh) |
| void | lg_unserialize_LG_Mesh_32_to_64 (LG_Mesh *mesh, Serializable_LG_Mesh *s_mesh) |
| LG_LoadMesh_Flags | lg_loadmesh_flags (zboolean save_to_assets, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| void | lg_mesh_info (LG_Mesh *mesh) |
| char * | lg_replace_file_extension (const char *path, const char *new_ext) |
This module deals with meshes, ie data that will feed VBOs and IBOs for fast and efficient drawing.
You can/should only use this func to load meshes:
and you can/should only use this func when done with a mesh:
and just ignore the details.
(Use everything here only if you know what you're doing).
NEW CONVENTIONS FOR PATHS / FILE NAMES AS FUNC ARGS:
| LG_Mesh * lg_mesh_load | ( | const char * | relative_path, |
| LG_LoadMesh_Flags | flags | ||
| ) |
Load OBJ or FBX or BMESH mesh file
=== THIS IS THE NEW ENTRY POINT FOR LOADING MESHES (OBJ, FBX, BMESH) AND THE ONLY FUNC YOU NEED TO CALL ===
If OBJ or FBX file successfully loaded, then successfully saved as BMESH, will set mesh name ext as BMESH
WARNING: FBX support is not complete yet
| relative_path | Relative path of mesh file, with extension OBJ or FBX or BMESH, expected to be in predefined locations |
| flags | Apply to mesh: save_to_assets, invert_z, normalize_xyz, horiz_center, vert_center, vert_bottom |
| LG_Mesh * lg_mesh_load_easy | ( | const char * | relative_path, |
| zboolean | force_reload_objs, | ||
| LG_LoadMesh_Flags | flags1 | ||
| ) |
Helper func which will call lg_mesh_load()
If force_reload_objs is set to TRUE, look only for OBJ or FBX files - if found, parse them and save them as BMESH files
Otherwise, look first for BMESH files - if not found, look for OBJ or FBX files - if found, parse them and save them as BMESH files
Example use:
| relative_path | Relative path of mesh file (extension is not checked), expected to be in predefined locations |
| force_reload_objs | Setting force_reload_objs to TRUE is easier than deleting all files in assets/meshes/bmesh/ |
| flags | LG_LoadMesh_Flags You can use LG_LoadMesh_Flags flags1 = lg_loadmesh_flags(zboolean save_to_assets, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) and these macros, which are all set to TRUE: SAVE_TO_ASSETS, INVERT_Z, NORMALIZE_XYZ, VERT_CENTER, VERT_BOTTOM |
| LG_Mesh * lg_mesh_new_from_objfile | ( | const char * | relative_path, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Create mesh from OBJ file.
Read data from WAVEFRONT OBJ files: vertex/index values for v (coords), vt (texture coords), vn (normals), f (triangular faces), mtllib, usemtl (materials/textures stuff), plus newmtl, and map_K* (in MTL files).
Other data is ignored so far.
=== WARNING: MESHES MUST BE PURE-TRIANGULAR ===
Will create a Vertex_uv_n VBO (see lg_vertex.h).
NO-OP on Android as BMESH files should be used instead
| relative_path | Relative path of OBJ file (with extension OBJ), expected to be in OBJ_DIR predefined location |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | Normalize spatial coords |
| horiz_center | Center mesh horizontally |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| LG_Mesh * lg_mesh_new_from_fbxfile | ( | const char * | relative_path, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Create mesh from FBX file.
| relative_path | Relative path of FBX file (with extension OBJ), expected to be in FBX_DIR predefined location |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | Normalize spatial coords |
| horiz_center | Center mesh horizontally |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| void lg_mesh_free | ( | LG_Mesh * | mesh | ) |
Free mesh.
| mesh |
| int lg_bmesh_save_to_file | ( | const char * | full_path, |
| LG_Mesh * | mesh | ||
| ) |
Save mesh in BINARY MESH (.bmesh) format. Don't add suffix BINARY_MESH_EXT, as it's done automagically.
| full_path | BMESH file full path |
| mesh | Pointer to a LG_Mesh |
| int lg_bmesh_load_from_file | ( | const char * | full_path, |
| LG_Mesh ** | mesh | ||
| ) |
Load mesh from BINARY MESH (.bmesh) file. Don't add suffix BINARY_MESH_EXT, as it's done automagically.
| full_path | BMESH file full path |
| mesh | Pointer to an array of pointers to LG_Mesh |
| int lg_mesh_reload_mats | ( | LG_Mesh * | mesh | ) |
Reload materials textures correctly, when mesh is not loaded from OBJ file.
| mesh | Pointer to a LG_Mesh |
| void lg_serialize_LG_Material_64_to_32 | ( | Serializable_LG_Material * | s_mat, |
| LG_Material * | mat | ||
| ) |
Serialize a LG_Material instance
| s_mat | Pointer to a Serializable_LG_Material |
| mat | Pointer to a Serializable_LG_Material |
| void lg_unserialize_LG_Material_32_to_64 | ( | LG_Material * | mat, |
| Serializable_LG_Material * | s_mat | ||
| ) |
Unserialize a LG_Material instance
| mat | Pointer to a Serializable_LG_Material |
| s_mat | Pointer to a Serializable_LG_Material |
| void lg_serialize_LG_Mesh_64_to_32 | ( | Serializable_LG_Mesh * | s_mesh, |
| LG_Mesh * | mesh | ||
| ) |
Serialize a LG_Mesh instance
| s_mesh | Pointer to a Serializable_LG_Mesh |
| mesh | Pointer to a LG_Mesh |
| void lg_unserialize_LG_Mesh_32_to_64 | ( | LG_Mesh * | mesh, |
| Serializable_LG_Mesh * | s_mesh | ||
| ) |
Unserialize a LG_Mesh instance
| mesh | Pointer to a LG_Mesh |
| s_mesh | Pointer to a Serializable_LG_Mesh |
| LG_LoadMesh_Flags lg_loadmesh_flags | ( | zboolean | save_to_assets, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Mesh loading flags.
See lg_mesh_load().
You can use these helper, which are all set to TRUE:
| save_to_assets | Save to assets as BMESH, otherwise to cache - on Android, should always be set to FALSE as you can't write to assets |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | |
| horiz_center | |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| char * lg_replace_file_extension | ( | const char * | path, |
| const char * | new_ext | ||
| ) |
Replace file extension with another extension, ie 'bla_bla/hello.old_ext' -> 'bla_bla/hello.new_ext'
Extension must not include leading dot
Remove trailing dot if new_ext is empty string
Returned new path must be freed after use (dynamically allocated)
| path | |
| new_ext |