Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/BKE_mesh_tangent.h
| Show All 16 Lines | |||||
| * split normals can be used to recreate the full tangent space. | * split normals can be used to recreate the full tangent space. | ||||
| * NOTE: * The mesh should be made of only tris and quads! | * NOTE: * The mesh should be made of only tris and quads! | ||||
| */ | */ | ||||
| void BKE_mesh_calc_loop_tangent_single_ex(const float (*vert_positions)[3], | void BKE_mesh_calc_loop_tangent_single_ex(const float (*vert_positions)[3], | ||||
| int numVerts, | int numVerts, | ||||
| const struct MLoop *mloops, | const struct MLoop *mloops, | ||||
| float (*r_looptangent)[4], | float (*r_looptangent)[4], | ||||
| const float (*loop_normals)[3], | const float (*loop_normals)[3], | ||||
| const struct MLoopUV *loopuv, | const float (*loopuv)[2], | ||||
| int numLoops, | int numLoops, | ||||
| const struct MPoly *mpolys, | const struct MPoly *mpolys, | ||||
| int numPolys, | int numPolys, | ||||
| struct ReportList *reports); | struct ReportList *reports); | ||||
| /** | /** | ||||
| * Wrapper around BKE_mesh_calc_loop_tangent_single_ex, which takes care of most boilerplate code. | * Wrapper around BKE_mesh_calc_loop_tangent_single_ex, which takes care of most boilerplate code. | ||||
| * \note | * \note | ||||
| * - There must be a valid loop's CD_NORMALS available. | * - There must be a valid loop's CD_NORMALS available. | ||||
| Show All 11 Lines | void BKE_mesh_calc_loop_tangent_ex(const float (*vert_positions)[3], | ||||
| const struct MPoly *mpoly, | const struct MPoly *mpoly, | ||||
| uint mpoly_len, | uint mpoly_len, | ||||
| const struct MLoop *mloop, | const struct MLoop *mloop, | ||||
| const struct MLoopTri *looptri, | const struct MLoopTri *looptri, | ||||
| uint looptri_len, | uint looptri_len, | ||||
| struct CustomData *loopdata, | struct CustomData *loopdata, | ||||
| bool calc_active_tangent, | bool calc_active_tangent, | ||||
| const char (*tangent_names)[64], | const char (*tangent_names)[MAX_CUSTOMDATA_LAYER_NAME], | ||||
| int tangent_names_len, | int tangent_names_len, | ||||
| const float (*vert_normals)[3], | const float (*vert_normals)[3], | ||||
| const float (*poly_normals)[3], | const float (*poly_normals)[3], | ||||
| const float (*loop_normals)[3], | const float (*loop_normals)[3], | ||||
| const float (*vert_orco)[3], | const float (*vert_orco)[3], | ||||
| /* result */ | /* result */ | ||||
| struct CustomData *loopdata_out, | struct CustomData *loopdata_out, | ||||
| uint loopdata_out_len, | uint loopdata_out_len, | ||||
| short *tangent_mask_curr_p); | short *tangent_mask_curr_p); | ||||
| void BKE_mesh_calc_loop_tangents(struct Mesh *me_eval, | void BKE_mesh_calc_loop_tangents(struct Mesh *me_eval, | ||||
| bool calc_active_tangent, | bool calc_active_tangent, | ||||
| const char (*tangent_names)[MAX_NAME], | const char (*tangent_names)[MAX_CUSTOMDATA_LAYER_NAME], | ||||
| int tangent_names_len); | int tangent_names_len); | ||||
| /* Helpers */ | /* Helpers */ | ||||
| void BKE_mesh_add_loop_tangent_named_layer_for_uv(struct CustomData *uv_data, | void BKE_mesh_add_loop_tangent_named_layer_for_uv(struct CustomData *uv_data, | ||||
| struct CustomData *tan_data, | struct CustomData *tan_data, | ||||
| int numLoopData, | int numLoopData, | ||||
| const char *layer_name); | const char *layer_name); | ||||
| #define DM_TANGENT_MASK_ORCO (1 << 9) | #define DM_TANGENT_MASK_ORCO (1 << 9) | ||||
| /** | /** | ||||
| * Here we get some useful information such as active uv layer name and | * Here we get some useful information such as active uv layer name and | ||||
| * search if it is already in tangent_names. | * search if it is already in tangent_names. | ||||
| * Also, we calculate tangent_mask that works as a descriptor of tangents state. | * Also, we calculate tangent_mask that works as a descriptor of tangents state. | ||||
| * If tangent_mask has changed, then recalculate tangents. | * If tangent_mask has changed, then recalculate tangents. | ||||
| */ | */ | ||||
| void BKE_mesh_calc_loop_tangent_step_0(const struct CustomData *loopData, | void BKE_mesh_calc_loop_tangent_step_0(const struct CustomData *loopData, | ||||
| bool calc_active_tangent, | bool calc_active_tangent, | ||||
| const char (*tangent_names)[64], | const char (*tangent_names)[MAX_CUSTOMDATA_LAYER_NAME], | ||||
| int tangent_names_count, | int tangent_names_count, | ||||
| bool *rcalc_act, | bool *rcalc_act, | ||||
| bool *rcalc_ren, | bool *rcalc_ren, | ||||
| int *ract_uv_n, | int *ract_uv_n, | ||||
| int *rren_uv_n, | int *rren_uv_n, | ||||
| char *ract_uv_name, | char *ract_uv_name, | ||||
| char *rren_uv_name, | char *rren_uv_name, | ||||
| short *rtangent_mask); | short *rtangent_mask); | ||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } | } | ||||
| #endif | #endif | ||||