Blender  V3.3
Macros | Functions
BKE_mesh_tangent.h File Reference

Go to the source code of this file.

Macros

#define DM_TANGENT_MASK_ORCO   (1 << 9)
 

Functions

void BKE_mesh_calc_loop_tangent_single_ex (const struct MVert *mverts, int numVerts, const struct MLoop *mloops, float(*r_looptangent)[4], const float(*loopnors)[3], const struct MLoopUV *loopuv, int numLoops, const struct MPoly *mpolys, int numPolys, struct ReportList *reports)
 
void BKE_mesh_calc_loop_tangent_single (struct Mesh *mesh, const char *uvmap, float(*r_looptangents)[4], struct ReportList *reports)
 
void BKE_mesh_calc_loop_tangent_ex (const struct MVert *mvert, const struct MPoly *mpoly, uint mpoly_len, const struct MLoop *mloop, const struct MLoopTri *looptri, uint looptri_len, struct CustomData *loopdata, bool calc_active_tangent, const char(*tangent_names)[64], int tangent_names_len, const float(*vert_normals)[3], const float(*poly_normals)[3], const float(*loop_normals)[3], const float(*vert_orco)[3], struct CustomData *loopdata_out, uint loopdata_out_len, short *tangent_mask_curr_p)
 
void BKE_mesh_calc_loop_tangents (struct Mesh *me_eval, bool calc_active_tangent, const char(*tangent_names)[MAX_NAME], int tangent_names_len)
 
void BKE_mesh_add_loop_tangent_named_layer_for_uv (struct CustomData *uv_data, struct CustomData *tan_data, int numLoopData, const char *layer_name)
 
void BKE_mesh_calc_loop_tangent_step_0 (const struct CustomData *loopData, bool calc_active_tangent, const char(*tangent_names)[64], int tangent_names_count, bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n, char *ract_uv_name, char *rren_uv_name, short *rtangent_mask)
 

Macro Definition Documentation

◆ DM_TANGENT_MASK_ORCO

#define DM_TANGENT_MASK_ORCO   (1 << 9)

Definition at line 75 of file BKE_mesh_tangent.h.

Function Documentation

◆ BKE_mesh_add_loop_tangent_named_layer_for_uv()

void BKE_mesh_add_loop_tangent_named_layer_for_uv ( struct CustomData uv_data,
struct CustomData tan_data,
int  numLoopData,
const char *  layer_name 
)

◆ BKE_mesh_calc_loop_tangent_ex()

void BKE_mesh_calc_loop_tangent_ex ( const struct MVert mvert,
const struct MPoly mpoly,
uint  mpoly_len,
const struct MLoop mloop,
const struct MLoopTri looptri,
uint  looptri_len,
struct CustomData loopdata,
bool  calc_active_tangent,
const char(*)  tangent_names[64],
int  tangent_names_len,
const float(*)  vert_normals[3],
const float(*)  poly_normals[3],
const float(*)  loop_normals[3],
const float(*)  vert_orco[3],
struct CustomData loopdata_out,
uint  loopdata_out_len,
short *  tangent_mask_curr_p 
)

◆ BKE_mesh_calc_loop_tangent_single()

void BKE_mesh_calc_loop_tangent_single ( struct Mesh mesh,
const char *  uvmap,
float(*)  r_looptangents[4],
struct ReportList reports 
)

Wrapper around BKE_mesh_calc_loop_tangent_single_ex, which takes care of most boilerplate code.

Note
  • There must be a valid loop's CD_NORMALS available.
  • The mesh should be made of only tris and quads!

Definition at line 153 of file mesh_tangent.c.

References BKE_mesh_calc_loop_tangent_single_ex(), BKE_report(), BKE_reportf(), CD_MLOOPUV, CD_NORMAL, CustomData_get_layer(), CustomData_get_layer_named(), float(), Mesh::ldata, mesh, Mesh::mloop, Mesh::mpoly, Mesh::mvert, RPT_ERROR, Mesh::totloop, Mesh::totpoly, and Mesh::totvert.

◆ BKE_mesh_calc_loop_tangent_single_ex()

void BKE_mesh_calc_loop_tangent_single_ex ( const struct MVert mverts,
int  numVerts,
const struct MLoop mloops,
float(*)  r_looptangent[4],
const float(*)  loopnors[3],
const struct MLoopUV loopuv,
int  numLoops,
const struct MPoly mpolys,
int  numPolys,
struct ReportList reports 
)

Compute simplified tangent space normals, i.e. tangent vector + sign of bi-tangent one, which combined with split normals can be used to recreate the full tangent space. NOTE: * The mesh should be made of only tris and quads!

◆ BKE_mesh_calc_loop_tangent_step_0()

void BKE_mesh_calc_loop_tangent_step_0 ( const struct CustomData loopData,
bool  calc_active_tangent,
const char(*)  tangent_names[64],
int  tangent_names_count,
bool rcalc_act,
bool rcalc_ren,
int *  ract_uv_n,
int *  rren_uv_n,
char *  ract_uv_name,
char *  rren_uv_name,
short *  rtangent_mask 
)

Here we get some useful information such as active uv layer name and search if it is already in tangent_names. Also, we calculate tangent_mask that works as a descriptor of tangents state. If tangent_mask has changed, then recalculate tangents.

Referenced by BKE_editmesh_loop_tangent_calc().

◆ BKE_mesh_calc_loop_tangents()

void BKE_mesh_calc_loop_tangents ( struct Mesh me_eval,
bool  calc_active_tangent,
const char(*)  tangent_names[MAX_NAME],
int  tangent_names_len 
)