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

Jul*_*lia 1 iphone opengl-es glsl ios opengl-es-2.0

我在这里真的很绝望.我正在使用Xcode,尝试在iPhone上实现一些OpenGL内容.我必须为Phong-Lighting写一个Shader.我得到了声明我的几何(顶点,索引,计算等)并将相应的参数作为属性传递给着色器(用GLSL编写).使用这些属性可以正常工作,一些非常基本的着色器程序可以正确编译并提供预期的输出.

现在我试着从一些更先进的计算开始,为此我需要使用GLSL的一些内置属性,即"g​​l_NormalMatrix",但每当我尝试时,程序崩溃,我得到一个"错误:0:3:使用未声明的标识符'gl_NormalMatrix'".每当使用任何内置属性(如gl_Vertex,gl_Normal等)时,它都会发生相同的情况.

这些属性在iPhone上的GLSL中是不可用的,还是我遗漏了什么?也许我还没有完全理解这是如何工作的.如上所述,将我自己的顶点属性传递到着色器工作正常,我也想知道程序应该如何"自己""知道"正确的值 - 所以内置属性的整个概念仍然有点令人困惑我.但每当我尝试运行一些着色器时,我发现在线查看是否有事情发生,我会抛出这些错误,即使其他人似乎在编写着色器时也广泛使用内置属性.

我真的希望有人能够对此有所了解.提前多谢!

朱莉娅

Tom*_*mmy 7

无论是在iPhone还是其他地方,GL ES都不提供这些属性.WebGL也是如此.您需要编写自己的矩阵代码,或者如果您只支持iOS 5+,则使用GLKit,并为自己提供属性.请参阅Kronos的参考卡,了解如何将其纳入ES 2.0的简要总结 - 除此之外,它还列出了所有可用的内置特殊变量:

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

GLKit的数学运算非常好,因为它内联并使用了ARM的NEON SIMD单元.我认为这是在所有新GL项目中将iOS 5指定为最低限度的充分理由.