我正在尝试在片段着色器中进行常规映射,这会导致渲染问题。我把问题归结为以下几点:
我有法向量n和切线t。如果我这样做:
return n;
这一切都很好和花花公子(但显然不是正常的映射)。但是,如果我这样做:
return n + 0.0 * t;
它搞砸了一切。对我来说,这些似乎应该是一样的,但显然它们不是。
return n + vec3(0.0, 0.0, 0.0);
工作正常,显然问题是:
0.0 * t != vec3(0.0, 0.0, 0.0)
我能想到的唯一情况是,如果b中的x,y或z是无穷大的话。但是,情况并非如此: 答:
0.0 * vec3(1.0/0.0, 1.0/0.0, 1.0/0.0)
工作正常,而且 B: 我使用isinf()检查它是否是无效的,返回false。
我还检查了我的代码,其中切线可能是无穷大的任何实例(当规范化时)但是删除规范化并不能解决它。我也检查了所有切向量的长度是1,它们都是这样,不管怎么说都不应该是问题。
编辑:我之前没有意识到NaN的可能性,所以我已经检查过并确认确实是这样的情况我现在知道问题不在于我的GLSL代码,而是在我的OBJ模型中的某处导入代码。我想这个问题现在可以标记为已经解决了吗?