正常映射,空间混乱

时间:2014-06-18 22:15:56

标签: opengl glsl normals

到目前为止,我遇到的唯一法线贴图是已经存在于世界空间中的地图,所以我只是从纹理中提取信息并使用普通矩阵对其进行转换。

现在我想尝试使用切线空间中的法线贴图,但我立刻感到非常困惑。

我的代码到目前为止

顶点着色器

 ...
passedPosition = modelViewMatrix*vec4(vertexPosition,1.0);
 ...

片段着色器

 vec3 V = normalize(-passedPosition .xyz);   // Eye vector
 ...
 vec3 L_dir = passedPosition .xyz - lights[i].lightPosition.xyz;
 vec3 L = normalize(L_dir); 
 ...

然后继续我的灯光计算。

我遇到的所有教程都将所有光线方向和视图矢量更改为切线空间(在顶点共享中),然后从纹理中提取法线并继续(在片段中)。 我的问题是,我想避免访问顶点共享中的所有灯光信息,所以我的问题是:

  • 传递到共享t,b,n向量的片段是否有意义,以便我在那里转换光线方向?我应该考虑访问顶点共享中的所有光照信息(我有一个Light struck数组,它不仅仅是位置),然后将它们传递给共享的片段?是我想避免的事情,但如果情况好多了,我可以想到它。
  • 有一种方法可以执行与我现在更加兼容的法线贴图(上面发布的片段)。
  • 我应该考虑将我的计算从视图空间改为世界空间吗?在这种情况下,我如何执行法线贴图?

0 个答案:

没有答案