设备和模拟器上的底纹不同

问题描述:

我在常规视图控制器中嵌入了GLKViewController,该控制器显示我公司产品之一的旋转3D模型。我在不同的应用程序中使用相同的代码来显示另一个模型,我没有问题。设备和模拟器上的底纹不同

由于某些原因,当我在模拟器上运行我的当前应用程序时,我得到的平滑阴影非常细腻,但是当我在设备上运行(我已经在iPad 3和iPad 4上测试过)时,似乎是细胞阴影,好像照明值更加离散。

真正的困惑是,只有在设备上运行时,才会发生这种情况,并且只发生在这个特定的模型上,而不是我用过的任何其他模型。

Running in the simulatorRunning on the device

是否有GLSL一个已知的bug,可能会导致这种行为?

编辑

有趣的是,我的调试过程中,如果我改变

gl_FragColor = vec4(ambientColor.rgb + diffuseReflection + specularReflection, 1.0); 

gl_FragColor = vec4(diffuseReflection, 1.0); 

我得到我想要的输出,但是当我输出的每个组成部分,其余的组件都显示为黑色,这不应该导致奇怪的阴影行为。

+2

在我的经验中,这种特定于设备的奇怪现象通常来自精确的工件。您在这些计算中使用lowp还是中等精度?如果你把它提升到更高的精度水平,会发生什么?我看到的另一个原因是黑色像素是着色器中的错误,就像零分或溢出一样。这些有时在模拟器中处理,而不是在设备上处理。 – 2013-03-25 17:54:25

+0

@BradLarson我在着色器中使用了很多lowp变量,但是将它们改为highp并没有解决问题 – 2013-04-01 15:01:58

+0

@BradLarson如何检查/ 0和溢出?整个着色器计算中只有一个分区(光衰) – 2013-04-04 15:50:34

您是否检查过顶点和片段着色器的文件名?

如果您有一个名为“vertexShader.vert”的文件,并尝试使用“VertexShader.vert”(请注意大小写)来引用它,则此功能可以在模拟器上使用,但不能在设备上使用。

+0

它绝对是编译和使用正确的着色器。如果这是一个完整的着色器问题,我想这将是所有模型的问题,而不仅仅是这一个 – 2013-03-21 15:57:00