我在不同设备上的片段着色器遇到了一些问题。在某些设备上,着色器工作正常,但在其他设备上,算法会产生奇怪的结果。我检查了 Java 中的算法,以确保算法本身不包含错误。
算法失败的部分如下。当我这样编写计算时,它适用于所有设备:
float a = sqrt(dot(MD,MD));
float factor = (dot(MD,b)/a)/a;
但如果我使用
float factor = dot(MD,b)/dot(MD,MD);
我相信这是相同的计算,因此应该产生相同的结果,但该算法在某些设备上失败。可能发生故障的其他部分更复杂,但也许如果我能理解为什么会失败,我也可以解决其他部分。
任何帮助将不胜感激。
顺便说一句,我正在使用具有精度 mediump float 的 OpenGL ES 2.0 并且 dot(MD,MD) 始终大于零