【问题标题】:How to implement bump mapping with phong shading如何使用 phong 着色实现凹凸贴图
【发布时间】:2014-10-16 23:43:12
【问题描述】:

在片段着色器中,我有从 3D 模型读取的视图坐标轴系统中的法线向量和从凹凸纹理获得的凹凸法线向量。 如果我想获得漫反射因子和镜面反射因子。我应该简单加上这两个正常的还是做其他事情?

【问题讨论】:

  • 这很大程度上取决于您如何从凹凸纹理计算法线。当您沿纹理的 x 和 y 轴读取深度值并计算导数以获得法线时,您必须将计算的法线从切线空间转换到模型空间并在那里使用它而不是对象的法线。当您已经沿模型空间计算导数时,您可以简单地替换对象的法线,而无需任何进一步的转换。

标签: qt opengl glsl


【解决方案1】:

实时使用最常见的法线映射技术,需要预先计算每个顶点的切线双切线向量,作为法线向量的补充。

在获得法线、切线、副法线向量后,您可以创建一个矩阵(比如说 TBN)来从 视图空间 转换到 模型的切线空间

因此(在顶点着色器中)您使用 TBN 矩阵将光矢量和眼睛矢量(Lambert 漫反射项和 Phong 反射所需)转换为切线空间;

例如(在片段着色器中)漫反射项将是 D = L dot N; (其中 L 是切线空间中的光照位置,N 是从法线贴图纹理中提取的法向量)。

您可以找到详细教程:here

【讨论】:

  • 这是一个双切线,而不是一个副常态。您也可以在 2D 中“法线贴图”,而无需使用顶点法线,但您总是需要切线。
  • 是的,你没看错,叫bitangent更合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多