我在网上看到的类似问题的许多答案提供了切线空间矩阵的计算,但我想知道如何计算每个顶点切线作为顶点属性发送到着色器。据我所知,每个顶点的切线必须与相邻顶点相似,以避免视觉照明伪影,因此无法根据法线选择任意垂直向量。
额外的信息 - 我有通过我为.obj(波前)模型文件编写的解析器获得的法线,顶点位置和纹理坐标等数据。
我可以想象这将是一个相对简单的问题,但不是数学家,甚至不是该领域特别称职的人,答案不会跳出来。
答案 0 :(得分:1)
只需使用UV(纹理坐标)的导数来对齐切线空间。即你的切线空间的一个向量是正常的,你可以自由地选择其他两个。通过旋转它们使它们与UV坐标导数重合,可以得到平滑的切线场。然而,这仅仅是故事的一半,因为这确实是一件非常棘手的事情。这是一些额外的阅读:
在不同的应用程序中也使用了多个切线空间,因此您必须考虑所需的切线空间。要获得全面的报道,请搜索mikktspace
库(mikktspace.h
和mikktspace.c
。)