我在这里真的很绝望。我正在使用Xcode,尝试在iPhone上实现一些OpenGL内容。我必须为Phong-Lighting写一个Shader。我得到了声明我的几何(顶点,索引,计算等)并将相应的参数作为属性传递给着色器(用GLSL编写)。使用这些属性可以正常工作,一些非常基本的着色器程序可以正确编译并提供预期的输出。
现在我尝试从一些更高级的计算开始,我需要使用GLSL的一些内置属性,即“gl_NormalMatrix”,但每当我尝试时,程序崩溃,我得到一个“错误:0:3:使用未声明的标识符'gl_NormalMatrix'”。 每当使用任何内置属性(如gl_Vertex,gl_Normal等)时,它都会发生相同的情况。
这些属性在iPhone上的GLSL中是不可用的,还是我遗漏了什么?也许我还没有完全理解这是如何工作的。如上所述,将我自己的顶点属性传递到着色器工作正常,我也想知道程序应该如何“自己”“知道”正确的值 - 所以内置属性的整个概念仍然有点令人困惑我。但每当我尝试运行一些着色器时,我在网上发现是否发生了某些事情,即使其他人似乎在编写着色器时都广泛使用内置属性,我也会抛出这些错误。
我真的希望有人能够对此有所了解。提前一千谢谢!
朱莉娅
答案 0 :(得分:7)
无论是在iPhone还是其他地方,GL ES都无法使用这些属性。 WebGL也是如此。您需要编写自己的矩阵代码,或者如果您只支持iOS 5+,则使用GLKit,并为自己提供属性。请参阅Kronos' reference card,了解有关将其纳入ES 2.0的简要摘要 - 除此之外,它还列出了所有可用的内置特殊变量:
GLKit的数学运算非常好,因为它内联并使用了ARM的NEON SIMD单元。我认为这是在所有新GL项目中将iOS 5指定为最低限度的充分理由。