【发布时间】:2012-01-13 04:18:59
【问题描述】:
我正在尝试计算网格中每个顶点的切线(凹凸贴图所需)。 v1、v2 和 v3 是三角形中的顶点,t1、t2 和 t3 是各自的纹理坐标。据我了解,这应该输出三角形三个顶点的切线。
Vec3f va = Vec3f{vertexData[a * 3 + 0], vertexData[a * 3 + 1], vertexData[a * 3 + 2]};
Vec3f vb = Vec3f{vertexData[b * 3 + 0], vertexData[b * 3 + 1], vertexData[b * 3 + 2]};
Vec3f vc = Vec3f{vertexData[c * 3 + 0], vertexData[c * 3 + 1], vertexData[c * 3 + 2]};
Vec2f ta = (Vec2f){texcoordData[a * 2 + 0],texcoordData[a * 2 + 1]};
Vec2f tb = (Vec2f){texcoordData[b * 2 + 0],texcoordData[b * 2 + 1]};
Vec2f tc = (Vec2f){texcoordData[c * 2 + 0],texcoordData[c * 2 + 1]};
Vec3f v1 = subtractVec3f(vb, va);
Vec3f v2 = subtractVec3f(vc, va);
Vec2f t1 = subtractVec2f(tb, ta);
Vec2f t2 = subtractVec2f(tc, ta);
float coef = 1/(t1.u * t2.v - t1.v * t2.u);
Vec3f tangent = Vec3fMake((t2.v * v1.x - t1.v * v2.x) * coef,
(t2.v * v1.y - t1.v * v2.y) * coef,
(t2.v * v1.z - t1.v * v2.z) * coef);
我的问题是 coef 变量有时是 nan (not a number) 值导致乘法被关闭。我的网格不是超级复杂,一个简单的圆柱体,但我想要一个通用公式来计算切线,以便在我的所有网格上启用凹凸贴图。
【问题讨论】: