【问题标题】:Calculating vertex normals fron Normal map从法线贴图计算顶点法线
【发布时间】:2015-12-18 16:30:19
【问题描述】:

我想为被高度图置换的顶点生成法线。我有相应的法线贴图,但是我看到的示例显示法线向量等于法线贴图上像素的 RGB 值。但这意味着所有法线向量都是正的,而某些向量应该具有负值。您将如何使用法线贴图计算这些?

谢谢!

【问题讨论】:

    标签: graphics mapping normals


    【解决方案1】:

    您只需将范围转移到<-1.0,+1.0> 所以

    1. 如果你的颜色通道在<0.0,1.0>范围内

      // a)
      nx=(2.0*r)-1.0
      ny=(2.0*g)-1.0
      nz=(2.0*b)-1.0
      

      或:

      // b)
      nx=2.0*(r-0.5)
      ny=2.0*(g-0.5)
      nz=2.0*(b-0.5)
      
    2. 如果每个通道有 8 位,则范围为 <0,255>

      nx=(float(r)/127.5)-1.0
      ny=(float(g)/127.5)-1.0
      nz=(float(b)/127.5)-1.0
      

    如果您查看法线贴图图像,您应该会看到蓝色,因为从平面向上指向的中性normal=(0,0,1) 被编码为color=(r=0.5,g=0.5,b=1.0),如下所示:

    也看看这里:Normal mapping gone horribly wrong,其中法线是通过 #1b 方法从 GLSL 中的此类纹理计算的:

    const vec4 v05=vec4(0.5,0.5,0.5,0.5);
    texture2D(txr_normal,pixel_txr.st)-v05)*2.0;
    

    同样(r,g,b) 可以映射到(nz,ny,nx) 而不是(nx,ny,nz) 在这种情况下只需交换r,b(然后法线贴图变为红色)

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 2013-02-15
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2021-12-05
      • 2014-09-25
      相关资源
      最近更新 更多