struct vec3
{
float x, y, z;
};
struct texcoord
{
float u,v;
};
//计算切线
void calc_tangent(const vec3& p0,
const vec3& p1,
const vec3& p2,
const texcoord& c0,
const texcoord& c1,
const texcoord& c2,
vec3& out_tangent)
{
vec3 p10;
p10.x = p1.x - p0.x;
p10.y = p1.y - p0.y;
p10.z = p1.z - p0.z;
vec3 p20;
p20.x = p2.x - p0.x;
p20.y = p2.y - p0.y;
p20.z = p2.z - p0.z;
texcoord t10;
t10.u = c1.u - c0.u;
t10.v = c1.v - c0.v;
texcoord t20;
t20.u = c2.u - c0.u;
t20.v = c2.v - c0.v;
float div = t20.u * t10.v - t10.u * t20.v;
vec3 ddiv;
ddiv.x = t10.v * p20.x - t20.v * p10.x;
ddiv.y = t10.v * p20.y - t20.v * p10.y;
ddiv.z = t10.v * p20.z - t20.v * p10.z;
out_tangent.x = ddiv.x / div;
out_tangent.y = ddiv.y / div;
out_tangent.z = ddiv.z / div;
}
几何体表面切线计算方法
最新推荐文章于 2020-03-08 16:32:26 发布