2014-09-06 34 views
0

[用于游戏中的延期照明计算]如何计算三角形的副法线和正切值?

可以说我有一个顶点ABC,法线DEF和纹理坐标LMN的任意三角形。

现在,我们有载体

G = B-A 
H = C-A 

O = M-L 
P = N-L 

下一步是计算的切空间:

G = O.s * T + O.t * U 
H = P.s * T + P.t * U 

这里就是我卡住了...

G和H 3维矢量,而O和P是二维的。

从这一点开始,正切空间的乘法是如何工作的? 一旦切线空间被确定,我如何获得副法线和切线? T是副法线,U是切线?

+1

这个问题似乎是脱离主题,因为它不是关于编程。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[数学堆栈交换](http://math.stackexchange.com/)会是一个更好的地方。 – jww 2014-09-06 12:02:29

+0

我的歉意。我认为这个问题是关于编程的,因为它涉及到3D图形和照明。 – 2014-09-06 18:25:18

+0

请问为什么这个作为一个副本被搁置。我实际上是在使用另一个问题作为参考,但需要澄清它的细节。 (困惑于如何解决T和U,这是在另一个涵盖但不是我理解的方式)。 – 2014-09-06 18:28:44

回答

1

以及我不使用纹理坐标矿TBN矩阵计算

你的名字混淆了,所以让我重写三角3Dp0,p1,p2。您需要TBN矩阵T,B,N(切线,副法线,正常)

  1. 正常

    法线垂直于三角面,所以你在三角形顶点的叉积得到它:

    N=(p1-p0)x(p2-p0) 
    

    方向取决于你的需求,所以你也可以使用这个 N =(p2-p0)x(p1-p0) 这是第Ë仅载体,其是直线前进

  2. 切线,副法线

    都位于三角形表面平面和应与网的其余部分相容。这很棘手,取决于网格几何。如果您已生成几何图形(如球体,...),则可以将初始方向矢量设置为某个轴。从这很容易只使用交叉产品。例如,围绕Z轴的旋转几何: T =(0.0,0.0,1。0)×N个 乙= N×T的 也在这里是方向依赖于你的需要,所以你可以使用反向横操作数命令

如果不计算TBN为整个几何兼容,那么你将得到照明工件

有时整个网状使用扭曲单整个矩形纹理像例如在该椭球头:

ellipsoid texture

只有在这种情况下,纹理坐标才表示正切和副法线空间坐标,只有这样您才可以使用它们来获取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?。解决方案也在那里(使用与你使用的相同的字母)

+0

只是想检查'x'是交叉的,'*'是乘法。正确? – 2014-09-06 19:32:27

+0

@ user2841239是'x'是向量之间交叉的(结果与操作数垂直),'*'在标量和其他之间是乘法的...... – Spektre 2014-09-07 05:37:49