![]() |
LibGame
v0.4.0
The LG Game Engine - Copyright (C) 2024-2025 ETMSoftware
|
=== Higher level scene/frame stuff === The starting point for scenes SERIALIZING nodes hierarchy with LG_Node_NTOS[]
LG_Scene lg_scene_new | ( | int | id, |
LG_Camera * | cam1, | ||
LG_Light | light1, | ||
Rec2Df | landscape_rec, | ||
uint16_t | grid_width | ||
) |
Create and init a new scene
Can not contain more than NODE_NTOS_MAX_NUM mesh references
LG_Node_NTOS and LG_Scene are defined in lg_scene_graph.h
Generated nodes:
New nodes ids added to the scene should start at or above SCENE_FIRST_OBJ_NODE_ID (id = 3)
id | Scene's id, set to -1 on error |
cam1 | A pointer to a LG_Camera |
light1 | A LG_Light |
landscape_rec | A Rec2Df, should be centered |
grid_width | Grid width, ie number of units along one row or one column, should be even - if odd, we substract one |
void lg_scene_free | ( | LG_Scene * | scene | ) |
Free scene root, grid, and xyz_arrows nodes
scene | A LG_Scene |
LG_SceneNode* lg_scenenode_new_and_set | ( | int | id, |
LG_SceneNode * | parent_node, | ||
const char * | mesh_file, | ||
LG_LoadMesh_Flags | flags, | ||
vec3_t | transl, | ||
LG_Quat | orientation, | ||
vec3_t | scaling | ||
) |
Helper func to create and set a new LG_SceneNode instance
Create node, add node to scene graph, load node's mesh, and set node's local matrix
Helper macros for less confusion:
Mesh must be freed when done with the scene
id | Node's id |
parent_node | A pointer to a scene graph node |
mesh_file | Relative path to mesh file to load, inside the mesh folder |
flags | Apply to mesh: force_reload, invert_z, normalize_xyz, horiz_center, vert_center, vert_bottom |
transl | Translation/position vec3 |
orientation | Orientation quat |
scaling | Scaling vec3 |
LG_SceneNode* lg_generate_scenenodes_from_scene_data | ( | LG_Scene * | scene, |
LG_SceneNode * | top_node, | ||
LG_LoadMesh_Flags | flags | ||
) |
Generate scene nodes (LG_SceneNode *) from a LG_Scene serializable data and mesh files by parsing scene's (LG_Node_NTOS) nodes_ntos[NODE_NTOS_MAX_NUM]
Will create and set scene nodes from an array of LG_Node_NTOS (deserialize nodes tree)
NTOS stands for (mesh file) Name and (scene node) TOS (Transl/Orientation/Scaling)
Generated scene nodes id should start at or above SCENE_FIRST_OBJ_NODE_ID (id = 3)
You can then add top_node to your scene root node
Example code:
scene | Pointer to a LG_Scene |
top_node | A scene node |
flags | Mesh loading flags |
mat4_t lg_get_TRS_matrix_from_TOS_v | ( | vec3_t | transl, |
LG_EulerAng | orientation, | ||
vec3_t | scaling, | ||
const char * | rot_order | ||
) |
Create a TRS matrix (Transl/Rotation/Scaling) from TOS values (Transl/Orientation/Scaling)
transl | Translation vector |
orientation | Orientation LG_EulerAng |
scaling | Scaling vector |
zboolean lg_set_TRS_matrix_from_node_NTOS | ( | mat4_t * | m_TRS, |
LG_Node_NTOS * | tos | ||
) |
Set an existing TRS matrix (Transl/Rotation/Scaling) from a LG_Node_NTOS
m_TRS | Pointer to a mat4_t |
tos | Pointer to a LG_Node_NTOS |
scaling | Scaling vector |
void lg_node_NTOS_array_info | ( | LG_Scene * | scene | ) |
void lg_node_NTOS_array_info_to_stream | ( | LG_Scene * | scene, |
FILE * | s | ||
) |
zboolean lg_scene_load_data_from_assets | ( | LG_Scene * | scene, |
const char * | path | ||
) |
zboolean lg_scene_load_data_from_file | ( | LG_Scene * | scene, |
const char * | path | ||
) |
zboolean lg_scene_save_data_to_file | ( | LG_Scene * | scene, |
const char * | path | ||
) |
zboolean lg_create_wr_scenes_dir | ( | ) |
Create the scene folder (SCENES_DIR) in the APP WRITABLE folder