0
我在不同的设备上使用我的片段着色器出现问题。 在某些设备上,着色器工作正常,但在其他算法上会产生好奇的结果。 我已经检查了Java中的算法,以确保算法本身不包含错误。在算法失败片段着色器算法中的意外行为
一部分如下。 当我写的计算这样它适用于所有设备:
float a = sqrt(dot(MD,MD));
float factor = (dot(MD,b)/a)/a;
,但如果我用
float factor = dot(MD,b)/dot(MD,MD);
其中,我认为这是同样的计算,因此,应产生相同的结果,但该算法在某些设备上失败。发生故障的其他部分更复杂,但如果我能理解为什么这样做会失败,我也可以解决其他部分。
任何帮助将不胜感激。
顺便说一句,我使用的OpenGL ES 2.0精度mediump浮动,点(MD,MD)总是大于零
谢谢你,你知道关于这个主题描述为多个设备开发时,我可以做些什么来避免此类问题的任何其他方法或引用?计算一个不必要的sqrt和部门只是为了使其工作,这是不正确的。 – user1581048
@ user1581048一般来说,你只是试图保持你的计算在稳定的范围内,没有共同的配方如何实现这一点。我可以建议你从关键字数值稳定性开始搜索。 – Vasaka
谢谢。我有点惊讶,这样的问题是由于接近0的计算导致的,因为我认为在1到0的范围内的计算在OpenGL中并不罕见。 – user1581048