根据模型的顶点坐标和纹理坐标计算顶点的法线、切线和副法线

xiaoxiao2021-04-18  88

如何根据模型的顶点位置坐标和纹理坐标计算顶点的法线、切线和副法线? 我们把顶点数据记作P(x,y,z,u,v),(x,y,z)是位置坐标,(u,v)纹理坐标 三角形的3个顶点就可以表示成 P0(x0,y0,z0,u0,v0) P1(x1,y1,z1,u1,v2) P2(x2,y2,z2,u2,v1) 因为u,v的变化对x的影响是线性的,则有 x = C1 u + C2 v + C3 不妨整理一下,写成 A0 x + B0 u + C0 v + D0 = 0 (1) 同理u,v的变化对y,z的影响是线性的,有 A1 y + B1 u + C1 v + D1 = 0 (2) A2 z + B2 u + C2 v + D2 = 0 (3)

可以看到 x,u,v 是成平面的,而A0,B0,C0就是平面的法线,可以通过三角形的3个顶点求得 (A0,B0,C0) = ((x0,u0,v0)-(x1,u1,v1))×((x0,u0,v0)-(x2,u2,v2)) D0 = -(A0,B0,C0)·(x0,s0,t0)

同理也可以求得(A1,B1,C1,D1),(A2,B2,C2,D2)

通过(1),(2),(3)式联立可以求得 d(x,y,z)/du = (-B0/A0,-B1/A1,-B2/A2) d(x,y,z)/dv = (-C0/A0,-C1/A1,-C2/A2)

我们就可以取d(x,y,z)/du为切线T,d(x,y,z)/dv为副法线B,法线N = T×B

参考:The.Cg.Tutorial.The.Definitive.Guide.to.Programmable.Real-Time.Graphics 8.4.1 Examining a Single Triangle http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter08.html

转载请注明原文地址: https://www.6miu.com/read-4819878.html

最新回复(0)