GLSL:iPhone应用程序无法访问的内置属性?

我在这里真的很绝望。 我使用Xcode,试图在iPhone上实现一些OpenGL的东西。 我必须为Phong-Lighting写一个Shader。 我得到了几何(顶点,索引,计算等),并将各自的参数作为属性传递给着色器(用GLSL编写)。 使用这些属性工作正常,一些真正的基本着色器程序编译正确,并给予预期的输出。

现在我试着从一些更高级的计算开始,为此我需要使用一些GLSL的内置属性,即“g​​l_NormalMatrix”,但是每当我尝试这个,程序崩溃,我得到一个“错误:0:3:使用未声明的标识符'gl_NormalMatrix'“。 无论何时使用任何内置属性,如gl_Vertex,gl_Normal等,都会发生同样的情况。

这些属性在iPhone上的GLSL中是不可用的还是我错过了一些东西? 也许我还没有完全明白这是如何工作的。 如前所述,将我自己的顶点属性传递给着色器效果很好,而且我也想知道程序如何“自己”“知道”正确的值 – 所以内置属性的整个概念仍然有点混乱我。 但是每当我尝试运行一些着色器时,我发现它们在网上,看看是否发生了什么事情,即使其他人似乎在编写着色器时都广泛地使用内置属性,也会引发这些错误。

我真的希望这里有人能够点亮这个。 千先谢谢!

朱莉娅

这些属性在GL ES中不可用,无论是iPhone还是其他地方。 WebGL也是如此。 您需要编写自己的matrix代码,或者如果仅支持iOS 5+,则使用GLKit,并为自己提供属性。 请参阅Kronos的参考卡,以获得令人难以置信的简要总结,将其引入ES 2.0中 – 其中列出了所有可用的内置特殊variables:

  • GL_POSITION
  • gl_PointSize
  • gl_FragCoord
  • gl_FrontFacing
  • gl_PointCoord
  • gl_FragColor
  • gl_FragData [n]的

GLKit的math内容非常好,因为它内嵌并使用了ARM的NEON SIMD单元。 我认为在所有新的GL项目中将iOS 5指定为最低要求是充分的理由。