2015-11-08 101 views
0

当我在我的应用程序中使用法线贴图,我得到的接缝这样 enter image description here法线贴图接缝接壤

我觉得有些不妥切线 我计算他们Rastertek.com

白衣这个功能
vector1[0] = vertex2.x - vertex1.x; 
vector1[1] = vertex2.y - vertex1.y; 
vector1[2] = vertex2.z - vertex1.z; 

vector2[0] = vertex3.x - vertex1.x; 
vector2[1] = vertex3.y - vertex1.y; 
vector2[2] = vertex3.z - vertex1.z; 

tuVector[0] = vertex2.tu - vertex1.tu; 
tvVector[0] = vertex2.tv - vertex1.tv; 

tuVector[1] = vertex3.tu - vertex1.tu; 
tvVector[1] = vertex3.tv - vertex1.tv; 

den = 1.0f/(tuVector[0] * tvVector[1] - tuVector[1] * tvVector[0]); 

tangent.x = (tvVector[1] * vector1[0] - tvVector[0] * vector2[0]) * den; 
tangent.y = (tvVector[1] * vector1[1] - tvVector[0] * vector2[1]) * den; 
tangent.z = (tvVector[1] * vector1[2] - tvVector[0] * vector2[2]) * den; 

binormal.x = (tuVector[0] * vector2[0] - tuVector[1] * vector1[0]) * den; 
binormal.y = (tuVector[0] * vector2[1] - tuVector[1] * vector1[1]) * den; 
binormal.z = (tuVector[0] * vector2[2] - tuVector[1] * vector1[2]) * den; 

我使用顶点法线但没有差异,当我使用面法线我得到同样的画面

我怎样才能解决这个问题

这是漫反射纹理渲染 enter image description here

+0

你有问题要问? –

+0

您是否有链接到Rastertek.com上您获得代码的页面。 –

+0

我的第一个虽然是纹理贴图不正确联合。你可以制作一个模型,纹理贴图只是作为普通纹理和简单的面/顶点法线应用到对象上。 –

回答

0

法线贴图画面的渲染输出仔细观察,它看起来像在右上角你有照明的反转意义。在左下角看起来你在表面上有树,右上角看起来像是指向外侧。这可能表明问题与方向。

实际上,在漫反射贴图中呈现的法线贴图具有相同的边界。在继续之前,请确保“在漫反射纹理中呈现的法线贴图”显示无缝。

球体很棘手,因为您无法在整个球体上定义非消失矢量场。 (Hairy ball theorem)这意味着你不能一致地定义整个球体上的切线和副法向量,必须有一些跳跃。这对你来说可能不是一个很大的问题,因为普通的地图是由各个部分组成的。有可能改变每个片段的矢量tutv的意义。因此,对于某些片段,其中一个或另一个被逆转tu'=-tu,tv'=-tv,或者可能颠倒这两者的顺序。 tu'=tv, tv'=-tu。您将需要某种代码方式来了解哪个补丁需要进行哪种转换。

解决此问题的一个极端方法是从您的对象中删除顶部和底部。这将允许您将对象视为一个扭曲的圆柱体,它可以具有两个矢量的一致定义。

也许更好的解决方案可能是将法线贴图存储为三个分量,直接在每个点处给出3D法线。

假设我们不必担心比其他90°旋转,我们可以有方形

  1. 没有变化TU = TU,TV'的对称性=电视
  2. 反思TU = 0 TU '= - TU,TV'=电视
  3. 反映在TV = 0 TU '= TU,TV'= - 电视
  4. 旋转90°TU '= - 电视,电视'= TU
  5. 旋转-90°TU '= tv,tv'= - tu
  6. 旋转180º TU = -tu,电视 '= - 电视
  7. 反映在TU = TV,TU'=电视,电视 '= TU
  8. 反映在TU = -TV,TU'= - 电视,电视'= - TU
+0

好,非常感谢。它仅适用于球面和torrus模型还是我桅杆计算所有我的模型? – harut9

+0

请你可以添加所有可能的tu,tv转换 – harut9