3d图形,单位矢量和正交矩阵

时间:2010-12-29 11:02:23

标签: math opengl

我正试图让我的脑袋缠绕在切线的空间里,我开始提出一些问题,我不能问我的同事,因为他们开始不知道我在说什么。我正在尝试在opengl上进行常规映射。我目前的计划是在几何着色器中计算切线 - 比特 - 法线矩阵。

  1. 当我有一个正交矩阵(例如TBN矩阵)并且我让opengl在顶点之间插值时,三个结果向量(T,B和N)是否仍然是单位长度?他们还是彼此成90度角吗?
  2. 当我将我的(单位长度)法线贴图样本与我的正交矩阵相乘时,结果是否也保证单位长度?我认为它是但不能通过它推理。
  3. 我正在考虑使用细节法线贴图,以便近距离对象看起来不像现在这样糟糕。这意味着有两个法线贴图。我如何组合这两个样本?
  4. 为了回答我自己的问题,一位同事来到#2工作,他想出了一个优雅的证据。

    表示这是有道理的,但足以说明这一点。

2 个答案:

答案 0 :(得分:1)

1)否和是。如果线性插值该矩阵,则生成的矢量仍然是正交的。在起始矩阵和结束矩阵之间的点处,幅度将小于1。您可以通过插入从(1,0,0)到(-1,0,0)的向量来看到这一点,其中某些点的长度实际上为零 - 这是您不应该遇到的情况,但是它显示了长度的变化。

如果行和列是正交单位向量,则它是正交矩阵。当从一个正交矩阵插值到另一个时,中间的矩阵将具有正交的行和列,但不是单位长度。我认为要求是矩阵内的向量都具有相同的长度,但不一定是单位长度。

2)单位向量乘以标准正交矩阵将是单位长度。你真的只是旋转到另一个参考框架。如果矩阵中的向量是正交但不正常,则您的向量将按相同的分数缩小。

3)如果你想用另一个地图替换一个地图,只需使用距观察者的距离函数在这些地图之间进行插值。不幸的是,这会导致矢量缩短(结果不会是单位长度)。

您应该能够插入法线贴图,使用插值矩阵应用结果(不重新规范化),并且只重新归一化最终的合成矢量。

答案 1 :(得分:1)

由于仍然没有完整的答案,我想我还有一个问题:

1)不,不。想象一下三个向量v1v2v3,它们是成对正交的并且都是单位长度。当然,-v3是单位长度,也与v1v2正交。现在想象一下矩阵A=(v1|v2|v3)B=(v2|v1|-v3)。如果你在两者之间进行插值,你将在中间得到C=((v1+v2)/2|(v1+v2)/2|0)。很容易看出这不会保持长度:(0 0 1)^T将成为零向量。而且,第一列和第二列将相等,这意味着它们的角度为0°。然而,在实践中,您将要插入的两个矩阵通常对于这种退化通常不会有足够的差异。如果你的表面是可定向的。如果您可以在表面内部和外部定义一致的表面,则表面是可定向的。 moebius-strip是一个常见的反例! 一种稍微更正确的方法是插值旋转(同样,表面需要可定向):你可以使用球面插值(谷歌!)或标准化插值(插值矩阵和正交化,但这也会因一些边缘情况而失败) 。然而,两种插值都很昂贵 - 实际上,人们只是将光源转换为顶点的TBN坐标并使用线性插值(相当于在TBN矩阵上使用线性插值)。

2。)肯定是的。事实上,这适用于任何长度,而不仅仅是一个。正交矩阵诱导同构映射,其保持向量之间的长度和角度。您可以使用这样的矩阵定义的两种转换是旋转和镜像,两者都直观地显示了这一点。

3。)就个人而言,我只是添加两个然后重新规范化。 Mipmapping通常会在距离内冲洗掉法线贴图,因为在平均过程中法线会变短。当然,您可以在mipmapping生成中重新规范化法线,但我会将其保留以防止锯齿并使此效果起作用。除此之外,它基本上是品味(和外观!)你如何结合这两者。说实话,它可能是一种更好的方法,根本不使用细节 - 法线贴图,只使用更高分辨率的纹理。图形硬件有足够的RAM用于现在的简单事情,如果您认为RAM正在成为一个问题,您可以随时传输内容。