以及我不使用纹理坐标矿TBN矩阵计算
你的名字混淆了,所以让我重写三角3D点p0,p1,p2
。您需要TBN矩阵T,B,N
(切线,副法线,正常)
正常
法线垂直于三角面,所以你在三角形顶点的叉积得到它:
N=(p1-p0)x(p2-p0)
方向取决于你的需求,所以你也可以使用这个 N =(p2-p0)x(p1-p0) 这是第Ë仅载体,其是直线前进
切线,副法线
都位于三角形表面平面和应与网的其余部分相容。这很棘手,取决于网格几何。如果您已生成几何图形(如球体,...),则可以将初始方向矢量设置为某个轴。从这很容易只使用交叉产品。例如,围绕Z轴的旋转几何: T =(0.0,0.0,1。0)×N个 乙= N×T的 也在这里是方向依赖于你的需要,所以你可以使用反向横操作数命令
如果不计算TBN为整个几何兼容,那么你将得到照明工件
有时整个网状使用扭曲单整个矩形纹理像例如在该椭球头:
![ellipsoid texture](https://i.stack.imgur.com/YcA6p.png)
只有在这种情况下,纹理坐标才表示正切和副法线空间坐标,只有这样您才可以使用它们来获取T,B
。我不使用这种方法,所以我会用你的方程。
让t0,t1,t2
成为你三角形的2D纹理坐标(相对于点p0,p1,p2
):
(p1-p0) = (t1-t0).s * T + (t1-t0).t * B
(p2-p0) = (t2-t0).s * T + (t2-t0).t * B
这是线性方程的系统(6个未知数6个方程),以便解决它,并计算T,B
(切线,副法线)。看这里How to calculate Tangent and Binormal?。解决方案也在那里(使用与你使用的相同的字母)
这个问题似乎是脱离主题,因为它不是关于编程。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[数学堆栈交换](http://math.stackexchange.com/)会是一个更好的地方。 – jww 2014-09-06 12:02:29
我的歉意。我认为这个问题是关于编程的,因为它涉及到3D图形和照明。 – 2014-09-06 18:25:18
请问为什么这个作为一个副本被搁置。我实际上是在使用另一个问题作为参考,但需要澄清它的细节。 (困惑于如何解决T和U,这是在另一个涵盖但不是我理解的方式)。 – 2014-09-06 18:28:44